首頁  >  文章  >  後端開發  >  PHP觀察者模式

PHP觀察者模式

高洛峰
高洛峰原創
2016-11-21 17:01:061640瀏覽

概念

觀察者模式屬於行為模式,是定義物件間的一種一對多的依賴關係,以便當一個物件的狀態改變時,所有依賴它的物件都會被通知並自動刷新。

當一個物件狀態改變後,會影響到其他幾個物件的改變,這時候可以用觀察者模式。

觀察者模式符合介面隔離原則,實現了物件之間的鬆散耦合。

別名

發布-訂閱模式

模型-視圖模式

源-收聽者模式

觀察者物件的引用保存到一個聚集裡,每個主題都可以有任何數量的觀察者。抽象主題提供一個接口,可以增加和刪除觀察者對象。

具體主題(ConcreteSubject):將有關狀態存入具體觀察者對象;在具體主題內部狀態改變時,給所有登記過的觀察者發出通知。

抽象觀察者(Observer):為所有的具體觀察者定義一個接口,在得到主題通知時更新自己。

具體觀察者(ConcreteObserver):實作抽象觀察者角色所要求的更新接口,以便使本身的狀態與主題狀態協調。

UML圖

程式碼

PHP觀察者模式範例程式碼

在PHP SPL中已經提供SplSubject和SqlOberverrroo運行結果

資料量加10

積分量加10

積分量加10

度和缺點

優點


觀察者和主題之間的優點耦合和缺點

優點

由於觀察者並不知道其它觀察者的存在,它可能對改變目標的最終代價一無所知。這可能會引起意外的更新。

適用場景

當一個抽像模型有兩個方面,其中一個方面依賴另一個方面。

當對一個對象的改變需要同時改變其它對象,而不知道具體有多少個對象待改變。

當一個對象必須通知其它對象,而它又不能假定其它對像是誰。換句話說,你不希望這些物件是緊密耦合的。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn