設(shè)計模式 - 觀察者模式

設(shè)計模式 - 觀察者模式

ID:40316741

大?。?98.50 KB

頁數(shù):8頁

時間:2019-07-31

設(shè)計模式 - 觀察者模式_第1頁
設(shè)計模式 - 觀察者模式_第2頁
設(shè)計模式 - 觀察者模式_第3頁
設(shè)計模式 - 觀察者模式_第4頁
設(shè)計模式 - 觀察者模式_第5頁
資源描述:

《設(shè)計模式 - 觀察者模式》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、設(shè)計模式讀書筆記-----觀察者模式學(xué)習(xí)設(shè)計模式已經(jīng)有段時間了,這是總結(jié)的第一篇博客,文中有錯誤、漏洞之處,望各位支出,改正。觀察者模式一、基本定義何謂觀察者模式?觀察者模式定義了對象之間的一對多依賴關(guān)系,這樣一來,當(dāng)一個對象改變狀態(tài)時,它的所有依賴者都會收到通知并且自動更新。在這里,發(fā)生改變的對象稱之為觀察目標(biāo),而被通知的對象稱之為觀察者。一個觀察目標(biāo)可以對應(yīng)多個觀察者,而且這些觀察者之間沒有相互聯(lián)系,所以么可以根據(jù)需要增加和刪除觀察者,使得系統(tǒng)更易于擴(kuò)展。觀察者模式又稱為發(fā)布-訂閱模式。二、基本結(jié)構(gòu)首先先看觀察者模式的UML類圖。分析:Subject:目標(biāo)

2、。他把所有對觀察者對戲的引用保存在一個聚集里,每一個主題都可以有多個觀察者。Observer:觀察者。為所有的具體觀察者定義一個接口,在得到主題的通知時能夠及時的更新自己。ConcreteSubject:具體主題。將有關(guān)狀態(tài)存入具體觀察者對象。在具體主題發(fā)生改變時,給所有的觀察者發(fā)出通知。ConcreteObserver:具體觀察者。實現(xiàn)抽象觀察者角色所要求的更新接口,以便使本身的狀態(tài)與主題狀態(tài)相協(xié)調(diào)。三、實現(xiàn)觀察者模式情景是這樣的:在氣象觀測站中,它能夠追蹤目前的天氣狀況,包括溫度、適度、氣壓。需要實現(xiàn)一個布告板,能夠分別顯示目前的狀態(tài),氣象統(tǒng)計和簡單的預(yù)報

3、。當(dāng)氣象站中獲取最新的測量數(shù)據(jù)時,三種布告板必須實時更新。下面是這個案例的設(shè)計圖:編碼實現(xiàn):主題接口Subject.java1publicinterfaceSubject{2/**3*注冊觀察者4*@paramobserver5*/6publicvoidregisterObserver(Observerobserver);78/**9*刪除觀察者10*@paramobserver11*/12publicvoidremoveOberver(Observerobserver);1314/**15*當(dāng)主題狀態(tài)發(fā)生改變時,這個方法需要被調(diào)用,以通知所有觀察者16*/1

4、7publicvoidnotifyObserver();18}觀察者接口Observer.java1publicinterfaceObserver{2publicvoidupdate(floattemp,floathumidity,floatpressure);3}布告板顯示接口DisplayElement.java1publicinterfaceDisplayElement{2publicvoiddisplay();3}WeatherData實現(xiàn)主題接口WeatherData.java1publicclassWeatherDataimplementsSubj

5、ect{2privateListobservers;3privatefloattempterature;4privatefloatpressure;5privatefloathumidity;67publicWeatherData(){8observers=newArrayList();9}1011@Override12publicvoidnotifyObserver(){13for(inti=0;i

6、observer.update(tempterature,humidity,pressure);16}17}1819@Override20publicvoidregisterObserver(Observerobserver){21observers.add(observer);22}2324@Override25publicvoidremoveOberver(Observerobserver){26inti=observers.indexOf(observer);27if(i>=0){28observers.remove(i);29}30}3132/**33

7、*氣象站得到更新的觀測數(shù)據(jù)時,通知觀察者34*/35publicvoidmeasurementChanged(){36notifyObserver();37}3839publicvoidsetMeasurements(floattemperature,floathumidity,floatpressure){40this.tempterature=temperature;41this.humidity=humidity;42this.pressure=pressure;43measurementChanged();44}45}布告板CurrentConditu

8、onDisplay.java1publ

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。