設計模式 觀察者模式

2021-07-26 14:30:12 字數 1088 閱讀 2285

觀察者(observer)模式:定義物件間的一種一對多的依賴關係,當乙個物件狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。

subject:被觀察者,被觀察者知道它的觀察者,可以有任意多個觀察者觀察同乙個目標,提供註冊和刪除觀察者物件的介面;

observer:觀察者,為那些在目標發生改變時需獲得通知的物件定義乙個更新介面;

concretesubject:具體目標,將有關狀態存入各個concreteobserver物件,當它的狀態發生改變時,向它的各個觀察者發出通知;

concreteobserver:具體觀察者,儲存乙個指向concretesubject物件的引用,儲存有關狀態,與subject狀態一致,實現observer的更新介面,使自身狀態與subject狀態一致;

優點:(1)目標與觀察者間抽象耦合;

(2)支援廣播通訊;

(3)建立一套觸發機制,可以通過觀察者模式實現一條觸發鏈

缺點:(1)由於觀察者不知道其他觀察者的存在,可能會引起意外的更新;

(2)多級觸發效率低下

實現:(1)當觀察者過多時,可以使用乙個hash表來維護目標與觀察者的遠射;

(2)乙個觀察者可以觀察多個目標;

(3)當刪除目標subject時,應該通知它的觀察者observer對該目標的引用進行重置,避免出現野指標;

(4)當subject發出通知前,要先更新自己的狀態,確保自身狀態與新狀態一致;

(5)更新資料時,可以使用推模型,或拉模型,推模型是目標subject把所有的更新資料傳給觀察者observer,拉模型是

subject只通知

observer資料已更新,然後有

observer主動請求需要的資料;

(6)可以擴充套件目標的註冊介面,讓觀察者註冊時指定感興趣的事件,只有當該事件發生時,才通知觀察者;

(7)對於不支援多重繼承的語言,通常將subject類和observer類寫到乙個類中;

(8)當目標與觀察者間的依賴關係特別複雜時,需要乙個維護這種關係的物件,變更管理器(changemanager)。

python 設計模式 觀察者 觀察者設計模式

在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...

設計模式 觀察者模式

觀察者模式定義了物件間一對多的依賴關係,乙個物件發生變化時,所有依賴它的物件都得到通知並被自動更新。本文主要闡述觀察者模式在分布式scada人機介面中的使用,利用這種模式使得人機介面顯示效率更高。發布者 郵局 觀察者 參與者 讀者 訂閱者 當郵局收到報社新雜誌的時候,即郵局狀態發生了改變,於是郵局把...

設計模式 觀察者模式

核心思想 註冊 通知 撤銷註冊 observer 將自己註冊到被觀察物件 subject 中,被觀察物件將觀察者存放在乙個容器 container 裡。被觀察物件發生了某種變化 如圖中的somechange 從容器中得到所有註冊過的觀察者,將變化通知觀察者。觀察者告訴被觀察者要撤銷觀察,被觀察者從容...