觀察者模式:定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件,這個主題物件在狀態發生變化時,會通知所有的觀察者物件,使它們能夠自動跟新自己
這個模式中主要涉及兩個物件:
subject:負責在自身的狀態發生變化的時候通知所持有的觀察者。
observer:在對subject觀察的過程中,及時應對subject所產生的變化,並於subject的狀態保持一致
public
inte***ce
iobserver
public
class
concreteobserver
implements
iobserver
@override
public
void
update()
}public
abstract
class
subject
public
void
removeobserver(iobserver observer)
public
void
notify1()
}public
class
concretesubject
extends
subject
public
void
setstatus(string status)
}public
class
client
}
觀察者模式主要適用於一下場景:
1.不同系統間進行通訊,類似於訊息佇列。
2.關聯行為場景,需要注意的是,關聯行為是可拆分的,而不是「組合」關係
優點:
將subject和observer之間關係通過依賴倒轉的方式來進行解耦,是兩部分的通訊依賴於抽象而不依賴實現。但是觀察者對於特定主題的以來依舊存在。
缺點:
再通知的時候是是按照儲存的順序而進行的同步通知操作,當其中乙個阻塞的時候,會導致其後的觀察者被阻塞。在不注重通知順序的情況下可以採用非同步通知來解決單點阻塞帶來的全域性性能障礙。
python 設計模式 觀察者 觀察者設計模式
在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...
設計模式 觀察者模式
觀察者模式定義了物件間一對多的依賴關係,乙個物件發生變化時,所有依賴它的物件都得到通知並被自動更新。本文主要闡述觀察者模式在分布式scada人機介面中的使用,利用這種模式使得人機介面顯示效率更高。發布者 郵局 觀察者 參與者 讀者 訂閱者 當郵局收到報社新雜誌的時候,即郵局狀態發生了改變,於是郵局把...
設計模式 觀察者模式
核心思想 註冊 通知 撤銷註冊 observer 將自己註冊到被觀察物件 subject 中,被觀察物件將觀察者存放在乙個容器 container 裡。被觀察物件發生了某種變化 如圖中的somechange 從容器中得到所有註冊過的觀察者,將變化通知觀察者。觀察者告訴被觀察者要撤銷觀察,被觀察者從容...