觀察者(observer)設計模式

2022-02-15 05:51:45 字數 1666 閱讀 6922

**:

假設我們有個高檔的熱水器,我們給它通上電,當水溫超過95度的時候:1、揚聲器會開始發出語音,告訴你水的溫度;2、液晶屏也會改變水溫的顯示,來提示水已經快燒開了。

現在假設熱水器由三部分組成:熱水器、警報器、顯示器,它們來自於不同廠商並進行了組裝。那麼,應該是熱水器僅僅負責燒水,它不能發出警報也不能顯示水溫;在水燒開時由警報器發出警報、顯示器顯示提示和水溫。

**如下:

//

熱水器public

class

heater

}}//

警報器public

class

alarm 度了:

", param);

}}//

顯示器public

class

display度。

", param);

}}

這裡就出現了乙個問題:如何在水燒開的時候通知報警器和顯示器?在繼續進行之前,我們先了解一下observer設計模式,observer設計模式中主要包括如下兩類物件:

subject:監視物件,它往往包含著其他物件所感興趣的內容。在本範例中,熱水器就是乙個監視物件,它包含的其他物件所感興趣的內容,就是temprature欄位,當這個欄位的值快到100時,會不斷把資料發給監視它的物件。

observer:監視者,它監視subject,當subject中的某件事發生的時候,會告知observer,而observer則會採取相應的行動。在本範例中,observer有警報器和顯示器,它們採取的行動分別是發出警報和顯示水溫。

在本例中,事情發生的順序應該是這樣的:

警報器和顯示器告訴熱水器,它對它的溫度比較感興趣(註冊)。

熱水器知道後保留對警報器和顯示器的引用。

熱水器進行燒水這一動作,當水溫超過95度時,通過對警報器和顯示器的引用,自動呼叫警報器的makealert()方法、顯示器的showmsg()方法。

類似這樣的例子是很多的,gof對它進行了抽象,稱為observer設計模式:observer設計模式是為了定義物件間的一種一對多的依賴關係,以便於當乙個物件的狀態改變時,其他依賴於它的物件會被自動告知並更新。observer模式是一種松耦合的設計模式。

**如下:

using

system;

using

system.collections.generic;

using

system.text;

namespace

delegate }}

}}

//警報器

public

class

alarm 度了:

", param);}}

//顯示器

public

class

display 度。

", param);}}

class

program

}}輸出為:

alarm:嘀嘀嘀,水已經

96度了:

alarm:嘀嘀嘀,水已經

96度了:

display:水快燒開了,當前溫度:96度。

//省略...

Observer 觀察者 設計模式

宣告 本博文篇幅短,適合review。一 概念 定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態發生變化時,會通知所有觀察者物件,使他們能夠自動更新自己。二 模式結構圖 三 例子 四 優缺點 1 優點 a 降低了觀察者與被觀察者之間的耦合。b subject在傳...

Observer觀察者設計模式

observer設計模式主要包括以下兩種物件 1 被觀察物件 subject,它往往包含其他物件感興趣的東西,上面例子中熱水器中就是subject 被監視物件 2 觀察物件 observer,它觀察著subject,當subject中的某件事發生後,會告知observer,obersver會採取相應...

設計模式 觀察者模式(observer

有時被稱作發布 訂閱模式,觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己。很經典的是cegui中的事件通知模式 模式中的角色 1 抽象主題 它把所有觀察者物件的引用儲存到乙個聚集裡,每個主題都可...