Java設計模式之觀察者模式observer?pattern詳解
觀察者模式
簡介:
當一個對象發(fā)生數(shù)據(jù)變化時,通知其他相關的一系列對象,接受到通知的對象根據(jù)該對象的變化進行相應處理以響應變化的過程。
概念解析:
其實與ActiveMQ、RabbitMQ等中間件的基本運行模式相類似,觀察者模式的基礎構建方式非常相近,其分為觀察者與被觀察者兩個部分。
(一)觀察者:從字面上看也就是指進行觀察的對象,對應來說也就是消息訂閱者;
(二)被觀察者:當然被觀察者也就是指被觀察的對象,相應的角色也就是消息發(fā)布者。
運行方式:
推:消息以類似廣播的形式通知觀察者,觀察者只能被動、無條件接受;
拉:接收到被觀察者的通知,可以自主決定獲取消息。
觀察者模式的實現(xiàn)
兩種方式實現(xiàn)觀察者設計模式的實現(xiàn),具體如下:
【1】手寫觀察者設計模式
【2】Java API 提供的觀察者設計模式 使用 Java API 提供的 Observer 和 Observeable 實現(xiàn)觀察者模式
手寫觀察者設計模式
編寫被觀察對象:subject.java
編寫觀察者接口,起到統(tǒng)一規(guī)范作用.
實現(xiàn)Observer接口,我們可以有一個或多個觀察者對一個subject進行觀察
編寫主類,進行運行展示
運行接口展示:
通過API實現(xiàn)觀察者模式
通過繼承Observable父類,構建一個被觀察者
實現(xiàn)Observer創(chuàng)建一個觀察者類
通過編寫主類測試類觀察結果:
觀察者模式的優(yōu)缺點
優(yōu)點:觀察者與被觀察者抽象耦合,可定義一種穩(wěn)定的消息觸發(fā)機制。 缺點:如果被觀察者有多個間接的觀察者,消息的傳遞將消耗更多時間,如果觀察者與被觀察者之間循環(huán)依賴,最終會導致系統(tǒng)崩潰。也正因如此與隊列消息相類似,我們一般會單獨開一個線程讓其進行運行,以避免程序堵塞,不能運行的尷尬。
使用場景:
一個抽象模型有兩個方面,其中一個方面依賴于另一個方面。將這些方面封裝在獨立的對象中使它們可以各自獨立地改變和復用。 一個對象的改變將導致其他一個或多個對象也發(fā)生改變,而不知道具體有多少對象將發(fā)生改變,可以降低對象之間的耦合度。 一個對象必須通知其他對象,而并不知道這些對象是誰。 需要在系統(tǒng)中創(chuàng)建一個觸發(fā)鏈,A對象的行為將影響B(tài)對象,B對象的行為將影響C對象……,可以使用觀察者模式創(chuàng)建一種鏈式觸發(fā)機制。
注意事項:
1、JAVA 中已經(jīng)有了對觀察者模式的支持類。
2、避免循環(huán)引用。
3、如果順序執(zhí)行,某一觀察者錯誤會導致系統(tǒng)卡殼,一般采用異步方式。
到此這篇關于Java設計模式之觀察者模式observer pattern詳解的文章就介紹到這了,更多相關Java觀察者模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
spring配置文件中util:properties和context:property-placeholder用法
這篇文章主要介紹了spring配置文件中util:properties和context:property-placeholder用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01SpringBoot?MP簡單的分頁查詢測試實現(xiàn)步驟分解
好久沒水后端的東西了,最近在做vue項目寫前端的代碼,所以cloud也停進度了,吃完飯突然記得我沒有在博客里寫分頁的東西,雖然項目中用到了,但是沒有拎出來,這里就拎出來看看2023-04-04Java和C語言分別實現(xiàn)水仙花數(shù)及拓展代碼
這篇文章主要介紹了分別用Java和C語言實現(xiàn)水仙花數(shù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-11-11