您好,登錄后才能下訂單哦!
觀察者模式
觀察者模式定義了對象之間的一對多依賴,這樣一來,當一個對象改變狀態時,它的所有依賴者都會收到通知并自動更新。一方可稱為主題(subject),另一方可稱為觀察者(observer),一個主題可擁有多個觀察者。當主題的數據有變動時,就會通知所有訂閱了它的觀察者。在這之后的操作有兩種:
推:主題直接將數據推送給所有觀察者。
拉:主題通知了所有觀察者后,每個觀察者再根據自己的需要從主題拉取所需數據。
現實中的列子: 報紙出版社+訂閱者=觀察者模式,找工作+獵頭=觀察者模式
概念圖:
UML圖:
我們看一個列子吧
需求:Internet氣象站需求
描述:跟蹤氣象站的數據,有變化時更新WeatherData對象,并最新信息顯示在對應的顯示器上,如下:
我們分析需求:
1. 一對多關系(不同的數據顯示在對應的布告板上,如:濕度,溫度等)。
2. 氣象數據有變化時更新最新值并顯示在布告板。
很適合觀察者模式來實現,最終實現的UML圖如下(代碼省略):
JAVA內置支持觀察者模式
注意:JAVA內置支持觀察者模式,Subject是類不是接口,導致必須用繼承,java本身不支持多繼承,所以導致層次問題,不靈活。建議自己實現。
java.util.Observable(主題)
java.util.Observer(觀察者)
我們用內置方法實現上面的列子,類圖如下:
總結;
觀察者模式的應用場景:
1、 對一個對象狀態的更新,需要其他對象同步更新,而且其他對象的數量動態可變。
2、 對象僅需要將自己的更新通知給其他對象而不需要知道其他對象的細節。
設計原則:為了交互對象之間的松耦合設計而努力。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。