php Observer窥视者模式之学习手记
发布时间:2023-11-04 11:04:17 所属栏目:PHP教程 来源:网络
导读: 那么如何让各家电脑知道自己的盟友被攻击了呢?并且自动做出反应?
待解决的问题:一旦某个电脑被我们进攻,其他电脑就获知,并且自动出兵救援。
思路:为电脑设置
待解决的问题:一旦某个电脑被我们进攻,其他电脑就获知,并且自动出兵救援。
思路:为电脑设置
那么如何让各家电脑知道自己的盟友被攻击了呢?并且自动做出反应? 待解决的问题:一旦某个电脑被我们进攻,其他电脑就获知,并且自动出兵救援。 思路:为电脑设置一些额外的观察系统,由他们去通知其他电脑。 观察者(Observer)模式示例: 代码如下 1 2 //抽象的结盟类 3 abstractclassabstractAlly{ 4 //放置观察者的集合,这里以简单的数组来直观演示 5 public$oberserverCollection; 6 //增加观察者的方法,参数为观察者(也是玩家)的名称 7 publicfunctionaddOberserver($oberserverName) 8 { 9 以元素的方式将观察者对象放入观察者的集合 10 $this->oberserverCollection[]=newoberserver($oberserverName); 11 } 12 //将被攻击的电脑的名字通知各个观察者 13 publicfunctionnotify($beAttackedPlayerName) 14 { 15 //把观察者的集合循环 16 foreach($this->oberserverCollectionas$oberserver) 17 { 18 //调用各个观察者的救援函数,参数为被攻击的电脑的名字,if用来排除被攻击的电脑的观察者 19 if($oberserver->name!=$beAttackedPlayerName)$oberserver->help($beAttackedPlayerName); 20 } 21 } 22 abstractpublicfunctionbeAttacked($beAttackedPlayer); 23 } 24 //具体的结盟类 25 classAllyextendsabstractAlly{ 26 //构造函数,将所有电脑玩家的名称的数组作为参数 27 publicfunction__construct($allPlayerName) 28 { 29 //把所有电脑玩家的数组循环 30 foreach($allPlayerNameas$playerName) 31 { 32 //增加观察者,参数为各个电脑玩家的名称 33 $this->addOberserver($playerName); 34 } 35 } 36 //将被攻击的电脑的名字通知各个观察者 37 publicfunctionbeAttacked($beAttackedPlayerName) 38 { 39 //调用各个观察者的救援函数,参数为被攻击的电脑的名字,if用来排除被攻击的电脑的观察者 40 $this->notify($beAttackedPlayerName); 41 } 42 } 43 //观察者的接口 44 interfaceIoberserver{ 45 //定义规范救援方法 46 functionhelp($beAttackedPlayer); 47 } 48 //具体的观察者类 49 classoberserverimplementsIoberserver{ 50 //观察者(也是玩家)对象的名字 51 public$name; 52 //构造函数,参数为观察者(也是玩家)的名称 53 publicfunction__construct($name) 54 { 55 $this->name=$name; 56 } 57 //观察者进行救援的方法 58 publichelp($beAttackedPlayerName) 59 { 60 //这里简单的输出,谁去救谁,最后加一个换行,便于显示 61 echo$this->name."help".$beAttackedPlayerName." "; 62 } 63 abstractpublicfunctionbeAttacked($beAttackedPlayer); 64 } 65 //假设我一对三,两家虫族,一家神族 66 $allComputePlayer=array('Zerg1','Protoss2','Zerg2'); 67 //新建电脑结盟 68 $Ally=newAlly($allComputePlayer); 69 //假设我进攻了第二个虫族 70 $Ally->beAttacked('Zerg2'); 71 ?> 用途总结:观察者模式可以将某个状态的变化立即通知所有相关的对象,并调用对方的处理方法。 实现总结:需要一个观察者类来处理变化,被观察的对象需要实现通知所有观察者的方法。 ![]() (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐