待解决的问题:原子弹投下的瞬间,将杀伤的处理分别交给杀伤范围内的部队或者建筑自己的方法处理。
思路:建立一个接口,让所有的部队或者建筑实现。
职责链模式(Chain of Responsibility)示例:
attackedThings[] = $thing;
}
//原子弹爆炸的方法,参数为投放点的x和y坐标
public function blast($x, $y)
{
//把爆炸的事情交给所有涉及的对象,让他们自己处理
foreach ($this->attackedThings as $thing)
{
//把爆炸的事情交给所有涉及的对象,让他们自己处理
$thing->NuclearAttacked($x, $y);
}
}
}
//新建一个基地对象
$CommandCenter = new CommandCenter();
//新建一个巡洋舰对象
$Battlecruiser = new Battlecruiser();
//造了一颗原子弹
$Nuclear2 = new Nuclear();
//假设投放成功,那个瞬间一个基地对象和一个巡洋舰对象在杀伤范围内
$Nuclear2->addAttackedThings($CommandCenter);
$Nuclear2->addAttackedThings($Battlecruiser);
//原子弹爆炸,这样就把这个事件交给那些涉及的对象的处理方法,假设投放点的x和y坐标是2353, 368
$Nuclear2->blast(2353, 368);
?>用途总结:职责链模式可以将一个涉及到多个对象的事件的处理交给对象自己处理,减少关联性。
实现总结:需要一个处理事件的接口,然后让所有的对象实现。
上一篇:如何在PHP中使用类与对象