PHP設計模式之觀察者模式

2021-08-04 23:09:44 字數 1334 閱讀 8469

當物件間存在一對多關係時,則使用觀察者模式(observer pattern)。比如,當乙個物件被修改時,則會自動通知它的依賴物件。觀察者模式屬於行為型模式。

觀察者模式類似於訂閱,當有訊息時,被訂閱者會把訊息推送給多個訂閱者,從而改變訂閱者的某些行為。類似的,觀察者模式分為觀察者被觀察者,被觀察者(即主題)發生某些行為時,向觀察者傳送訊息從而改變觀察者的行為等。

舉個例子:

我們定義乙個介面isubject, 用來定義被觀察者(主題)的行為:

inte***ce isubject

具體化isubject介面
class subject implements isubject

function removeobserver($observer)

function notifyobservers()

}function run()

}

再定義乙個觀察者介面 ioserver 用來定義觀察者的行為,
inte***ce iobserver

接下來 建立兩個類 繼承ioserver介面 表示 兩個觀察者,分別為first 和 second

class first implements iobserver

}class second implements iobserver

}

最後模擬行為
$first = new first();

$second = new second();

$subject = new subject();

$subject->regiterobserver($first);

$subject->regiterobserver($second);

//$subject->run();

例項化被觀察者(主題),然後將first,second兩個例項註冊成觀察者,當subject 執行run 發生動作時(即輸出'被觀察者行為改變'),向所有的觀察者傳送訊息(執行update),執行不同的操作。
輸出結果
被觀察者行為改變

first

second

同樣可以註冊3,4設定更多的觀察者,只需要函式將它們註冊為觀察者即可

php設計模式之 觀察者模式

觀察者模式 observer 當乙個物件狀態發生改變時,依賴它的物件全部收到通知,並自動更新。抽象被觀察者 abstract class eventgenerator 通知所有觀察者 public function notify 具體被觀察者class event extends eventgene...

PHP 設計模式之觀察者模式

介紹現在有兩派,有的人建議使用設計模式,有的人不建議使用設計模式!這就向寫文章一樣,有的人喜歡文章按照套路走,比如敘事性質的文章,時間,地點,人物,事件。而有的人喜歡寫雜文或者散文,有的人喜歡寫詩詞!很多時候,我看設計模式的時候,有些設計模式只是吻合我的 習慣。但是你硬去套它,那麼反而適得其反。很多...

php 設計模式之觀察者模式

觀察者模式 1.抽象事件發生類 abstract class eventgenerator 對 所有 觀察者 進行 事件 通知 function notify 2.宣告具體事件類 class event extends eventgenerator 3.宣告 乙個 觀察者 介面 inte ce ob...