您的位置:首页 > 编程语言 > PHP开发

PHP设计模式8-职责链模式

2013-08-04 19:13 423 查看
星际的兵种属性随着对平衡性的调节,会进行修改。如果这样的话,我们就要考虑减少一个事件和具体处理的关联性。比如一颗原子弹投下的瞬间,在杀伤范围内的部队或者建筑都会减少血,但是随着距离中心点的远近,受损程度是不同的,而且不同的兵种和建筑受损情况是不同的。待解决的问题:原子弹投下的瞬间,将杀伤的处理分别交给杀伤范围内的部队或者建筑自己的方法处理。思路:建立一个接口,让所有的部队或者建筑实现。职责链模式(Chain of Responsibility)示例:<?php//被原子弹攻击的接口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);?>用途总结:职责链模式可以将一个涉及到多个对象的事件的处理交给对象自己处理,减少关联性。实现总结:需要一个处理事件的接口,然后让所有的对象实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: