php Observer觀察者模式之學習筆記

來源:互聯網
上載者:User

那麼如何讓各家電腦知道自己的盟友被攻擊了呢?並且自動做出反應?


待解決的問題:一旦某個電腦被我們進攻,其他電腦就獲知,並且自動出兵救援。


思路:為電腦設定一些額外的觀察系統,由他們去通知其他電腦。

 

觀察者(Observer)模式樣本:

 代碼如下 複製代碼

<?php

//抽象的結盟類

abstractclassabstractAlly{

//放置觀察者的集合,這裡以簡單的數組來直觀示範

public$oberserverCollection;

//增加觀察者的方法,參數為觀察者(也是玩家)的名稱

publicfunctionaddOberserver($oberserverName)

{

以元素的方式將觀察者對象放入觀察者的集合

$this->oberserverCollection[]=newoberserver($oberserverName);

}

//將被攻擊的電腦的名字通知各個觀察者

publicfunctionnotify($beAttackedPlayerName)

{

//把觀察者的集合迴圈

foreach($this->oberserverCollectionas$oberserver)

{

//調用各個觀察者的救援函數,參數為被攻擊的電腦的名字,if用來排除被攻擊的電腦的觀察者

if($oberserver->name!=$beAttackedPlayerName)$oberserver->help($beAttackedPlayerName);

}

}

abstractpublicfunctionbeAttacked($beAttackedPlayer);

}

//具體的結盟類

classAllyextendsabstractAlly{

//建構函式,將所有電腦玩家的名稱的數組作為參數

publicfunction__construct($allPlayerName)

{

//把所有電腦玩家的數組迴圈

foreach($allPlayerNameas$playerName)

{

//增加觀察者,參數為各個電腦玩家的名稱

$this->addOberserver($playerName);

}

}

//將被攻擊的電腦的名字通知各個觀察者

publicfunctionbeAttacked($beAttackedPlayerName)

{

//調用各個觀察者的救援函數,參數為被攻擊的電腦的名字,if用來排除被攻擊的電腦的觀察者

$this->notify($beAttackedPlayerName);

}

}

//觀察者的介面

interfaceIoberserver{

//定義規範救援方法

functionhelp($beAttackedPlayer);

}

//具體的觀察者類

classoberserverimplementsIoberserver{

//觀察者(也是玩家)對象的名字

public$name;

//建構函式,參數為觀察者(也是玩家)的名稱

publicfunction__construct($name)

{

$this->name=$name;

}

//觀察者進行救援的方法

publichelp($beAttackedPlayerName)

{

//這裡簡單的輸出,誰去救誰,最後加一個換行,便於顯示

echo$this->name."help".$beAttackedPlayerName."<br>";

}

abstractpublicfunctionbeAttacked($beAttackedPlayer);

}

//假設我一對三,兩家蟲族,一家神族

$allComputePlayer=array('Zerg1','Protoss2','Zerg2');

//建立電腦結盟

$Ally=newAlly($allComputePlayer);

//假設我進攻了第二個蟲族

$Ally->beAttacked('Zerg2');

?>


途總結:觀察者模式可以將某個狀態的變化立即通知所有相關的對象,並調用對方的處理方法。


實現總結:需要一個觀察者類來處理變化,被觀察的對象需要實現通知所有觀察者的方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.