指多個物件間存在一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。這種模式有時又稱作發布-訂閱模式、模型-檢視模式,它是物件行為型模式。
適用場景:
如果存在一系列類,他們都需要向指定類獲取指定的資料,當獲取到資料後需要觸發相應的業務邏輯。這種場景就可以用觀察者模式來實現。
優點:
降低了目標與觀察者之間的耦合關係,兩者之間是抽象耦合關係。
目標與觀察者之間建立了一套觸發機制。
缺點:
目標與觀察者之間的依賴關係並沒有完全解除,而且有可能出現迴圈引用。
當觀察者物件很多時,通知的發布會花費很多時間,影響程式的效率。
將observer註冊進observable中有如下兩種方式:
1. 執行前,通過spring xml
在系統執行前,如果觀察者數量可以確定,並在執行過程中不會發生變化,那麼就可以在xml中完成list物件的注入,這種方式**將會比較簡潔。
配置好所有 觀察者 bean
配置好 被觀察者 bean,並將所有觀察者bean注入給被觀察者bean
2. 執行中,通過addobserver()函式在spring初始化的時候,通過addobserver()函式將所有observer物件注入observable的observerlist中。
@component
@override
observable.setobserverlist(arrays.aslist(observera, observerb));
} }
}
建議使用第一種方式初始化所有的觀察者,此外,被觀察者仍然需要提供addobserver()函式供系統在執行期間動態地新增、刪除觀察者物件。
jdk已經提供了觀察者模式的工具包,包括observable類和observer介面。若要實現觀察者模式,直接使用這兩個工具包即可。
參考:(1)觀察者模式(observer模式)詳解
(2)柴毛毛大話設計模式——開發常用的設計模式梳理
行為型模式 觀察者模式
物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。subject 抽象的主題,被觀察的物件,提供 attach 和detach observer 物件的介面。concretesubject 具體的被觀察物件,維持 concretesubject 狀態...
行為型模式 觀察者模式
抽象觀察者,及具體觀察者 class abstractobserver class student public abstractobserver virtual void dobadthing 老師沒來應該幹什麼 virtual void onteachercoming 老師來了應該幹什麼 pri...
十六 行為型模式 觀察者模式
一 觀察者模式 觀察者模式很好理解,類似於郵件訂閱和rss訂閱,當我們瀏覽一些部落格或wiki時,經常會看到rss圖示,就這的意思是,當你訂閱了該文章,如果後續有更新,會及時通知你。其實,簡單來講就一句話 當乙個物件變化時,其它依賴該物件的物件都會收到通知,並且隨著變化!物件之間是一種一對多的關係。...