javascript
java观察者模式在spring中的应用_在Spring中使用观察者模式
菜鳥教程中關于觀察者模式的介紹如下:
意圖:定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知并被自動更新。
主要解決:一個對象狀態改變給其他對象通知的問題,而且要考慮到易用和低耦合,保證高度的協作。
何時使用:一個對象(目標對象)的狀態發生改變,所有的依賴對象(觀察者對象)都將得到通知,進行廣播通知。
如何解決:使用面向對象技術,可以將這種依賴關系弱化。
關鍵代碼:在抽象類里有一個 ArrayList 存放觀察者們。
應用實例:?拍賣的時候,拍賣師觀察最高標價,然后通知給其他競價者競價。
優點:?1、觀察者和被觀察者是抽象耦合的。 2、建立一套觸發機制。
缺點:?1、如果一個被觀察者對象有很多的直接和間接的觀察者的話,將所有的觀察者都通知到會花費很多時間。 2、如果在觀察者和觀察目標之間有循環依賴的話,觀察目標會觸發它們之間進行循環調用,可能導致系統崩潰。 3、觀察者模式沒有相應的機制讓觀察者知道所觀察的目標對象是怎么發生變化的,而僅僅只是知道觀察目標發生了變化。
以下演示如何在實際的Spring工程中使用觀察者模式。
這個demo的框架如下所示,與直接實現的觀察者、被觀察者模式相比,可以通過中間的觀察者訂閱管理服務Bean,動態注冊、移除觀察者,被觀察者狀態發生變化時,會通知觀察者訂閱管理服務,這個服務再通知所有訂閱了這個被觀察者的服務。
被觀察者需要繼承Java自帶的util包中的Observerble接口,并且調用setChange()和notifyObservers()函數通知被觀察者(在這里是觀察者訂閱管理服務);觀察者服務,需要實現Java Util包中的Observer類接口。
首先被觀察者,在需要通知觀察者的時候,需要調用setChange()和notifyObservers()函數通知被觀察者,其中notifyObservers函數可以傳參數。
init函數在Bean初始化后,將觀察者訂閱管理服務添加到觀察者中。
然后是觀察者訂閱管理服務,提供觀察者注冊、移除功能,在觀察者狀態變化時,通知所有訂閱了的觀察者。
然后是觀察者,我在觀察者Bean創建成功后就在觀察者訂閱管理服務注冊了,也可以在其他有需要的時候拿到這個bean,訂閱或者移除。觀察者可以拿到被觀察者在notifyObservers函數傳過來的參數。
重要的事情
被觀察者狀態發生變化后,通知到訂閱管理服務,訂閱管理服務再依次通知所有觀察者,這個過程是阻塞的,有可能訂閱的觀察者非常多,或者觀察者需要做一些耗時的操作,會阻塞很長的時間,所以在觀察者中要采用異步的方法來避免長時間的阻塞。
總結
以上是生活随笔為你收集整理的java观察者模式在spring中的应用_在Spring中使用观察者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ustc小道消息20211229
- 下一篇: gradle idea java ssm