觀察者模式使用的例子
observer—|
|—nonuse不使用觀察者模式的例子
|—use使用觀察者模式的例子
定義物件之間的一種一對多依賴關係,使得當每乙個物件狀態發生改變時,其相關依賴物件皆得到通知並被自動更新。 subject(抽象目標):又稱為主題,是被觀察的物件。concretesubject(具體目標):抽象目標的子類,通常包含有經常發生改變的資料,當它的狀態發生改變時,向其各個觀察者發出通知。
observer(抽象觀察者):觀察者將對觀察目標的改變做出反應。
concreteobserver(具體觀察者):具體觀察者中維持乙個指向具體目標物件的引用,它用於儲存具體觀察者的有關狀態,這些狀態需要和具體目標地狀態保持一致。
可以實現表示層和資料邏輯層的分離,觀察者和目標是松耦合的支援廣播通訊,觀察目標會向已註冊的觀察者物件傳送通知
增加新的觀察者無須修改原有系統**
如果乙個觀察目標有很多直接和間接的觀察者,所有觀察者收到通知會花費大量時間如果觀察者和觀察目標之間存在迴圈依賴,可能導致系統崩潰
如果忘記刪除不必要的訂閱者,那麼容易誤傳送訊息
乙個抽象模型有兩個方面,其中乙個方面依賴於另乙個方面,封裝起來使其獨立改變和復用乙個物件的改變將導致乙個或多個其他物件也發生改變,但並不知道具體有多少個物件將要發生改變當
乙個物件必須通知其他物件,但是你又希望這個物件與被通知的物件是松耦合的
1、通過微博的例子理解觀察者模式,如果你使用過微博,那麼觀察者模式你可以直接理解為多個粉絲關注同乙個明星的微博當明星傳送微博(目標傳送訊息),所有關注的人都會收到訊息(所有訂閱的觀察者都能收到訊息)
收到的微博是一樣的。(所有觀察者收到的訊息是一樣的)
如果取消關注,那麼就收不到訊息(觀察者取消訂閱目標之後就不能收到訊息),可以隨時關注隨時取消
明星不需要知道有多少人關注,只要傳送微博就行(目標不需要知道有多少人訂閱)
2、觀察者模式有兩種方式第一種,推送模式,目標向觀察者主動推送訊息
優點:獲取訊息及時,一有訊息變動就會被觀察者直接知道
缺點:觀察者不需要一些訊息的時候,會被迫收到很多不必要的資訊
第二種,獲取模式,觀察者向目標獲取訊息優點:需要就獲取,不需要就不獲取,靈活一些
缺點:如果不獲取,那麼訊息就不會被知道
3、觀察者模式和別的模式有關係(之後更新)參考部落格:
設計模式 觀察者模式(2)
被觀察物件向觀察者推送主題的詳情資訊時候,不管觀察者是否需要,這些資訊一般是觀察目標物件的全部或者部分資訊。一般這種模型實現通過update object obj 將觀察目標物件傳入進去。被觀察物件通知觀察者時候,只傳送少量的資訊,如果需要詳情資訊時候,被觀察物件也就是觀察目標物件主動到觀察者當中,...
設計模式 觀察者模式2
觀察者模式 一.概念 傳統理解 觀察者模式 有時又被稱為發布 publish 觀察者模式 observer 完美的將觀察者和被觀察的物件分離開。舉個例子,使用者介面可以作為乙個觀察者,業務資料是被觀察者,使用者介面觀察業務資料的變化,發現資料變化後,就顯示在介面上。物件導向設計的乙個原則是 系統中的...
python 設計模式 觀察者 觀察者設計模式
在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...