1. 什麼是觀察者模式
定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新
2. 觀察者模式的結構
結構圖:
抽象主題角色(subject):抽象主題把所有觀察者物件的引用儲存在乙個列表中,並提供增加和刪除觀察者物件的操作,抽象主題角色又叫抽象被觀察者角色,一般由抽象類或介面實現。
抽象觀察者角色(observe):為所有具體觀察者定義乙個介面,在得到主題通知時更新自己,一般由抽象類和介面實現
具體主題角色(concrete subject):實現抽象主題介面,具體主題角色又叫做具體被觀察者角色
具體觀察者角色(concrete subject):實現抽象觀察者角色所要求的介面,以便使自身狀態與主題的狀態相協調。
3. 觀察者模式的應用
4. 觀察者模式的優缺點
優點:
• 觀察者模式實現了表示層和資料邏輯層的分離,並定義了穩定的更新訊息傳遞機制,並抽象了更新介面,使得可以有各種各樣不同的表示層,即觀察者。
• 觀察者模式在被觀察者和觀察者之間建立了乙個抽象的耦合,被觀察者並不知道任何乙個具體的觀察者,只是儲存著抽象觀察者的列表,每個具體觀察者都符合乙個抽象觀察者的介面。
• 觀察者模式支援廣播通訊。被觀察者會向所有的註冊過的觀察者發出通知。
缺點:
• 如果乙個被觀察者有很多直接和間接的觀察者時,將所有的觀察者都通知到會花費很多時間。
• 雖然觀察者模式可以隨時使觀察者知道所觀察的物件傳送了變化,但是觀察者模式沒有相應的機制使觀察者知道所觀察的物件是怎樣發生變化的。
• 如果在被觀察者之間有迴圈依賴的話,被觀察者會觸發它們之間進行迴圈呼叫,導致系統崩潰,在使用觀察者模式應特別注意這點。
5. 觀察模式的實現
class
program
}//訂閱者介面
public
inte***ce
iobserver
//具體訂閱者類
public
class
subscriber
:iobserver
public
subscriber
(string name)
public
void
show
(officialaccounts oa)
}public
abstract
class
officialaccounts
public
string description
public
officialaccounts
(string category,
string description)
//訂閱者開始關注
public
void
addobserver
(iobserver ob)
//訂閱者取消關注
public
void
removeobserver
(iobserver ob)
//向所有訂閱者傳送更新內容
public
void update ()}
}}public
class
officialaccountsit
:officialaccounts
}
6 .net 中觀察者模式的應用(使用委託實現觀察者模式)
//委託充當訂閱者介面
public
delegate
void
observereventhandler
(object sender)
;class
program
}//具體訂閱者類
public
class
subscriber
public
subscriber
(string name)
public
void
show
(object sender)}}
public
abstract
class
officialaccounts
public
string description
public
officialaccounts
(string category,
string description)
//訂閱者開始關注
public
void
addobserver
(observereventhandler oh)
//訂閱者取消關注
public
void
removeobserver
(observereventhandler oh)
//向所有訂閱者傳送更新內容
public
void update ()}
}public
class
officialaccountsit
:officialaccounts
}
python 設計模式 觀察者 觀察者設計模式
在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...
C 設計模式 觀察者模式
觀察者模式 也可以稱為通知者模式,訂閱 發布模式 模型 檢視模式 大致概念 乙個主題 theme 多個觀察者 observer 收聽它。就好比 春節聯歡晚會 theme 全國觀眾 observer 現場直播。那麼我們怎樣看直播呢?沒有電視你看的成嗎?有電視,但是沒有全國直播,你看的成嗎?好了,這樣說...
C 設計模式 觀察者模式
二.實現 比如熱水器在燒水的過程中,當水溫即將燒開時,會發出報警的聲音,顯示器上會出現溫度監控 public inte ce iobserver iobserverable介面 public inte ce iobservable 抽象基類 public abstract class subject...