溫馨提示×

溫馨提示×

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

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

設(shè)計模式之觀察者模式-Java內(nèi)置觀察者及總結(jié)

發(fā)布時間:2020-06-21 15:22:22 來源:網(wǎng)絡(luò) 閱讀:291 作者:凱哥Java 欄目:編程語言

設(shè)計模式之觀察者模式-Java內(nèi)置觀察者及總結(jié)


觀察者下篇

在上一篇文章中,我們通過污污彈公司司小司做氣象站項目學(xué)習(xí)了觀察者模式怎么使用。在本篇中,我們對觀察者模式進(jìn)行總結(jié)及關(guān)鍵點,還有一個就是Java中內(nèi)置的觀察者模式。

本文出處:凱哥Java(kagejava)

一:Java內(nèi)置的觀察者

我們將使用Java內(nèi)置的觀察者將氣象站項目重新寫一次。

內(nèi)置觀察者的區(qū)別:

Subject對象:

1subject名稱變了,變成了Observable了;功能不變,還是注冊、移除、通知觀察者三個功能;

2observable是對象而非接口了,所以在使用的時候,不能在使用實現(xiàn)了,需要使用繼承關(guān)系。好處就是:因為是繼承關(guān)系,所以在注冊觀察者、移除觀察者、通知觀察者這三個方法具體實現(xiàn)我們可以不用寫了。

Observer對象:

observer對象名字沒有變化,功能還是update,沒有變化。?而且還是接口對象。

那么為什么observer不用類而用接口呢?因為我們知道,我們的observer是不同的項目,需求不一定的。所以,只能使用接口來定義了。具體實現(xiàn),各個項目根據(jù)自己項目功能自行實現(xiàn)即可。

不同:update時候,可以選擇將信息主動推送給觀察者還是讓觀察者自己來拉去。在Java內(nèi)置的觀察者模式中,推/拉都可以。

使用Java內(nèi)置觀察者實現(xiàn)的代碼:

項目結(jié)構(gòu):

設(shè)計模式之觀察者模式-Java內(nèi)置觀察者及總結(jié)

測試類:JavaObserverWeatherMainTest

需要說明的:

public class?CurrentConditionJava?implements?Observer {}

實現(xiàn)的Observer對象所在位置:import?java.util.Observer;

public class?WeaterDataJava?extends?Observable {}

繼承的Observerable對象所在位置:import?java.util.Observable;

運(yùn)行結(jié)果:

設(shè)計模式之觀察者模式-Java內(nèi)置觀察者及總結(jié)

達(dá)到我們預(yù)期的效果。說明,使用Java內(nèi)置的觀察者模式成功!

使用Java內(nèi)置的觀察者需要唯一注意的地方:observerable的繼承者在datachange時候,需要先setChanged()。如下圖:

設(shè)計模式之觀察者模式-Java內(nèi)置觀察者及總結(jié)

這一點一定要注意。

二:觀察者模式總結(jié)及關(guān)鍵點

百科上對觀察者模式基本介紹:

設(shè)計模式之觀察者模式-Java內(nèi)置觀察者及總結(jié)

實現(xiàn)方式:

設(shè)計模式之觀察者模式-Java內(nèi)置觀察者及總結(jié)

觀察者模式使用場景:

設(shè)計模式之觀察者模式-Java內(nèi)置觀察者及總結(jié)


觀察者模式四個角色:

設(shè)計模式之觀察者模式-Java內(nèi)置觀察者及總結(jié)

抽象主題角色(subject)、主題角色具體實現(xiàn)類

抽象觀察者角色(observer)、觀察者具體實現(xiàn)類

觀察者模式的優(yōu)缺點:

設(shè)計模式之觀察者模式-Java內(nèi)置觀察者及總結(jié)

觀察者模式執(zhí)行過程

設(shè)計模式之觀察者模式-Java內(nèi)置觀察者及總結(jié)

從觀察者模式中體會,松耦合、高內(nèi)聚、隔離影響的意義:

松耦合:類與類之間不要太依賴,沒有順序。依賴類不用關(guān)系被依賴類的內(nèi)部是怎么實現(xiàn)的。

對應(yīng)天氣站項目:實現(xiàn)了subject接口的天氣對象不需要關(guān)系具體的公告板內(nèi)部怎么實現(xiàn)的,需要做哪些。subject子類之關(guān)心公告板是否實現(xiàn)了observer接口類即可。

聯(lián)系凱哥:

公眾號:凱哥Java(kaigejava)

凱哥個人博客:www.kaigejava.com

留個言,加個好友,一起學(xué)習(xí)

就算實現(xiàn)了observer的公告板對象項目死掉了,subject對象依然可以正常運(yùn)行。反之,就算subject項目死掉了,依然不會影響observer項目的運(yùn)行。無非就是公告板不能公布最新數(shù)據(jù)而已。這就很好的體現(xiàn)了松耦合的好處。

高內(nèi)聚:對象內(nèi)部是高內(nèi)聚的。這樣便于調(diào)試、擴(kuò)展等。



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

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

AI