溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java觀察者模式是什么

發(fā)布時(shí)間:2021-09-01 09:29:52 來源:億速云 閱讀:118 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“java觀察者模式是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

觀察者模式

① 觀察者模式的概念

觀察者模式(Observer),又叫發(fā)布-訂閱模式(Publish/Subscribe),定義對(duì)象間一種一對(duì)多的依賴關(guān)系,使得每當(dāng)一個(gè)對(duì)象改變狀態(tài),則所有依賴于它的對(duì)象都會(huì)得到通知并自動(dòng)更新。UML結(jié)構(gòu)圖如下:

java觀察者模式是什么

舉個(gè)例子:就比如是 天氣觀測站和氣象報(bào)告板的關(guān)系。但報(bào)告板想獲取觀測站的數(shù)據(jù),可以注冊加入到觀測站的觀察者列表中,這就可以使觀測站有數(shù)據(jù)更新時(shí),自動(dòng)傳給氣象報(bào)告板。

java觀察者模式是什么

WeatherData 相當(dāng)于氣象觀測站 和 觀察者的 一個(gè)中介。WeatherData 獲取來自氣象觀測站的數(shù)據(jù)后,向觀察者發(fā)送數(shù)據(jù)。

② 觀察者模式的結(jié)構(gòu)

觀察者模式的主要角色如下:

  1. 抽象主題(Subject)角色:也叫抽象目標(biāo)類,它提供了一個(gè)用于保存觀察者對(duì)象的聚集類和增加、刪除觀察者對(duì)象的方法,以及通知所有觀察者的抽象方法。

  2. 具體主題(Concrete    Subject)角色:也叫具體目標(biāo)類,它實(shí)現(xiàn)抽象目標(biāo)中的通知方法,當(dāng)具體主題的內(nèi)部狀態(tài)發(fā)生改變時(shí),通知所有注冊過的觀察者對(duì)象。

  3. 抽象觀察者(Observer)角色:它是一個(gè)抽象類或接口,它包含了一個(gè)更新自己的抽象方法,當(dāng)接到具體主題的更改通知時(shí)被調(diào)用。

  4. 具體觀察者(Concrete Observer)角色:實(shí)現(xiàn)抽象觀察者中定義的抽象方法,以便在得到目標(biāo)的更改通知時(shí)更新自身的狀態(tài)。

③ 觀察者模式的優(yōu)缺點(diǎn)
  • 優(yōu)點(diǎn):

    • 降低了目標(biāo)與觀察者之間的耦合關(guān)系,兩者之間是抽象耦合關(guān)系。

    • 目標(biāo)與觀察者之間建立了一套觸發(fā)機(jī)制。

  • 缺點(diǎn)

    • 如果一個(gè)被觀察者對(duì)象有很多的直接和間接的觀察者的話,將所有的觀察者都通知到會(huì)花費(fèi)很多時(shí)間 。

    • 目標(biāo)與觀察者之間的依賴關(guān)系并沒有完全解除,而且有可能出現(xiàn)循環(huán)引用 。

“java觀察者模式是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI