行為型模式(4) 觀察者模式

2021-09-26 23:18:08 字數 1273 閱讀 6972

指多個物件間存在一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。這種模式有時又稱作發布-訂閱模式、模型-檢視模式,它是物件行為型模式。

適用場景:

如果存在一系列類,他們都需要向指定類獲取指定的資料,當獲取到資料後需要觸發相應的業務邏輯。這種場景就可以用觀察者模式來實現。

優點:

降低了目標與觀察者之間的耦合關係,兩者之間是抽象耦合關係。

目標與觀察者之間建立了一套觸發機制。

缺點:

目標與觀察者之間的依賴關係並沒有完全解除,而且有可能出現迴圈引用。

當觀察者物件很多時,通知的發布會花費很多時間,影響程式的效率。

將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圖示,就這的意思是,當你訂閱了該文章,如果後續有更新,會及時通知你。其實,簡單來講就一句話 當乙個物件變化時,其它依賴該物件的物件都會收到通知,並且隨著變化!物件之間是一種一對多的關係。...