比如一颗原子弹投下的瞬间,在杀伤范围内的部队或者建筑都会减少血,但是随着距离中心点的远近,受损程度是不同的,而且不同的兵种和建筑受损情况是不同的。
待解决的问题:原子弹投下的瞬间,将杀伤的处理分别交给杀伤范围内的部队或者建筑自己的方法处理。
思路:建立一个接口,让所有的部队或者建筑实现。
职责链模式(Chain of Responsibility)示例:
| 代码如下 | 复制代码 |
|
//被原子弹攻击的接口 interface NuclearAttacked { //处理被原子弹攻击的方法,参数为投放点的x和y坐标 public function NuclearAttacked($x, $y); } //人族的基地,实现被原子弹攻击的接口,其他的内容暂时不考虑 class CommandCenter implements NuclearAttacked { //处理被原子弹攻击的方法,参数为投放点的x和y坐标 public function NuclearAttacked($x, $y) { //根据离原子弹中心的距离,定义减少的血,如果超出了剩余的血,就炸掉 } } //巡洋舰(俗称大和),实现被原子弹攻击的接口,其他的内容暂时不考虑 class Battlecruiser implements NuclearAttacked { //处理被原子弹攻击的方法,参数为投放点的x和y坐标 public function NuclearAttacked($x, $y) { //根据离原子弹中心的距离,定义减少的血,如果超出了剩余的血,就炸掉 } } //原子弹类 class Nuclear { //被原子弹攻击的对象 public $attackedThings; //添加被原子弹攻击的对象 public function addAttackedThings($thing) { //添加被原子弹攻击的对象 $this->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); ?> |
|
用途总结:职责链模式可以将一个涉及到多个对象的事件的处理交给对象自己处理,减少关联性。
疯狂医院达什医生中文版(Crazy Hospital)
疯狂医院达什医生最新版是一款医院模拟经营类游戏,逼真的场景画
宝宝庄园官方版
宝宝庄园官方版是一款超级经典好玩的模拟经营类型的手游,这个游
桃源记官方正版
桃源记是一款休闲娱乐类的水墨手绘风格打造的模拟经营手游。玩家
长途巴士模拟器手机版
长途巴士模拟器汉化版是一款十分比真好玩的大巴车模拟驾驶运营类
房东模拟器最新版2024
房东模拟器中文版是一个超级有趣的模拟经营类型的手游,这个游戏