當物件間存在一對多關係時,則使用觀察者模式(observer pattern)。比如,當乙個物件被修改時,則會自動通知依賴它的物件。觀察者模式屬於行為型模式。
主要解決的問題:乙個物件狀態改變給其他物件通知的問題,而且要考慮到易用和低耦合,保證高度的協作。
觀察者模式所涉及的角色有:
抽象主題(subject):抽象主題角色把所有對觀察者物件的引用儲存在乙個聚集(比如arraylist物件)裡,每個主題都可以有任何數量的觀察者。抽象主題提供乙個介面,可以增加和刪除觀察者物件,抽象主題角色又叫做抽象被觀察者(observable)角色。
具體主題(concretesubject):將有關狀態存入具體觀察者物件;在具體主題的內部狀態改變時,給所有登記過的觀察者發出通知。
抽象觀察者(observer):為所有的具體觀察者定義乙個介面,在得到主題的通知時更新自己,這個介面叫做更新介面。
具體觀察者(concreteobserver):儲存與主題的狀態自恰的狀態。具體觀察者角色實現抽象觀察者角色所要求的更新介面,以便使本身的狀態與主題的狀態相協調。
示例**如下:
抽象主題:
public
abstract
class
subject
//刪除
public
void
delete
(observer observer)
public
abstract
void
notifyobserver()
;}
具體主題:
public
class
concretesubject
extends
subject);
}}
抽象觀察者:
inte***ce
observer
具體觀察者:
class
concreteobserver1
implements
observer
}class
concreteobserver2
implements
observer
}
測試類:
public
static
void
main
(string[
] args)
優點:
觀察者與被觀察者抽象耦合,容易擴充套件;
建立了一套觸發機制。
缺點:
3. 迴圈依賴會導致系統崩潰;
4. 觀察者太多會浪費時間。
能夠在某些頁面設定完了後直接通知其他監聽了這個事件的頁面立即重新整理,而不需要使用者回到某些頁面的時候再重新整理,實現區域性重新整理。
我的其他設計模式:
python 設計模式 觀察者 觀察者設計模式
在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...
設計模式 觀察者模式
觀察者模式定義了物件間一對多的依賴關係,乙個物件發生變化時,所有依賴它的物件都得到通知並被自動更新。本文主要闡述觀察者模式在分布式scada人機介面中的使用,利用這種模式使得人機介面顯示效率更高。發布者 郵局 觀察者 參與者 讀者 訂閱者 當郵局收到報社新雜誌的時候,即郵局狀態發生了改變,於是郵局把...
設計模式 觀察者模式
核心思想 註冊 通知 撤銷註冊 observer 將自己註冊到被觀察物件 subject 中,被觀察物件將觀察者存放在乙個容器 container 裡。被觀察物件發生了某種變化 如圖中的somechange 從容器中得到所有註冊過的觀察者,將變化通知觀察者。觀察者告訴被觀察者要撤銷觀察,被觀察者從容...