比如一颗原子弹投下的瞬间,在杀伤范围内的部队或者建筑都会减少血,但是随着距离中心点的远近,受损程度是不同的,而且不同的兵种和建筑受损情况是不同的。
待解决的问题:原子弹投下的瞬间,将杀伤的处理分别交给杀伤范围内的部队或者建筑自己的方法处理。
思路:建立一个接口,让所有的部队或者建筑实现。
职责链模式(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); ?> |
用途总结:职责链模式可以将一个涉及到多个对象的事件的处理交给对象自己处理,减少关联性。
我的博物馆故事 官方安卓版v1.61.2
我的博物馆故事是一款以消除为主题的经营养成类手游,在这里玩家
专业模拟飞行10 手机版v12.2.4
专业模拟飞行10安卓版是一款飞行休闲手游,顶尖的物理飞行引擎
动物起义战斗模拟器二琳同款 最新版v4.1.1
动物起义战斗模拟器是一个非常有趣的模拟类游戏,玩家可以召唤各
迷你世界七周年 安卓手机版v1.43.0
迷你世界7周年是一款由《迷你世界》官方推出的庆祝特别版本,在
劫后公司无限资源版 v1.0.5.1
劫后公司内置菜单版是游戏的破解版本,在该版本中为玩家提供了内