“Head First 設計模式“ :觀察者模式

觀察者模式


    觀察者模式定義了對象之間的一對多依賴,這樣一來,當一個對象改變狀態時,它的所有依賴者都會收到通知並自動更新。一方可稱爲主題(subject),另一方可稱爲觀察者(observer),一個主題可擁有多個觀察者。當主題的數據有變動時,就會通知所有訂閱了它的觀察者。在這之後的操作有兩種:

  • :主題直接將數據推送給所有觀察者。

  • :主題通知了所有觀察者後,每個觀察者再根據自己的需要從主題拉取所需數據。

    現實中的列子: 報紙出版社+訂閱者=觀察者模式,找工作+獵頭=觀察者模式


概念圖:

image.png

UML圖:

image.png


我們看一個列子

需求:Internet氣象站需求

描述:跟蹤氣象站的數據,有變化時更新WeatherData對象,並最新信息顯示在對應的顯示器上,如下:

image.png


我們分析需求:

1. 一對多關係(不同的數據顯示在對應的佈告板上,如:溼度,溫度等)。

2. 氣象數據有變化時更新最新值並顯示在佈告板。

很適合觀察者模式來實現,最終實現的UML圖如下(代碼省略):

image.png

JAVA內置支持觀察者模式

注意:JAVA內置支持觀察者模式,Subject是類不是接口,導致必須用繼承,java本身不支持多繼承,所以導致層次問題,不靈活。建議自己實現。

java.util.Observable(主題)

java.util.Observer(觀察者)

我們用內置方法實現上面的列子,類圖如下:

image.png


總結;

觀察者模式的應用場景: 

1、 對一個對象狀態的更新,需要其他對象同步更新,而且其他對象的數量動態可變。 

2、 對象僅需要將自己的更新通知給其他對象而不需要知道其他對象的細節。


設計原則:爲了交互對象之間的鬆耦合設計而努力。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章