觀察者模式
目前創(chuàng)新互聯(lián)已為上千余家的企業(yè)提供了網(wǎng)站建設、域名、虛擬空間、綿陽服務器托管、企業(yè)網(wǎng)站設計、潛江網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
觀察者模式定義了對象之間的一對多依賴,這樣一來,當一個對象改變狀態(tài)時,它的所有依賴者都會收到通知并自動更新。一方可稱為主題(subject),另一方可稱為觀察者(observer),一個主題可擁有多個觀察者。當主題的數(shù)據(jù)有變動時,就會通知所有訂閱了它的觀察者。在這之后的操作有兩種:
推:主題直接將數(shù)據(jù)推送給所有觀察者。
拉:主題通知了所有觀察者后,每個觀察者再根據(jù)自己的需要從主題拉取所需數(shù)據(jù)。
現(xiàn)實中的列子: 報紙出版社+訂閱者=觀察者模式,找工作+獵頭=觀察者模式
概念圖:
UML圖:
我們看一個列子吧
需求:Internet氣象站需求
描述:跟蹤氣象站的數(shù)據(jù),有變化時更新WeatherData對象,并最新信息顯示在對應的顯示器上,如下:
我們分析需求:
1. 一對多關系(不同的數(shù)據(jù)顯示在對應的布告板上,如:濕度,溫度等)。
2. 氣象數(shù)據(jù)有變化時更新最新值并顯示在布告板。
很適合觀察者模式來實現(xiàn),最終實現(xiàn)的UML圖如下(代碼省略):
JAVA內(nèi)置支持觀察者模式
注意:JAVA內(nèi)置支持觀察者模式,Subject是類不是接口,導致必須用繼承,java本身不支持多繼承,所以導致層次問題,不靈活。建議自己實現(xiàn)。
java.util.Observable(主題)
java.util.Observer(觀察者)
我們用內(nèi)置方法實現(xiàn)上面的列子,類圖如下:
總結;
觀察者模式的應用場景:
1、 對一個對象狀態(tài)的更新,需要其他對象同步更新,而且其他對象的數(shù)量動態(tài)可變。
2、 對象僅需要將自己的更新通知給其他對象而不需要知道其他對象的細節(jié)。
設計原則:為了交互對象之間的松耦合設計而努力。
網(wǎng)頁題目:“HeadFirst設計模式“:觀察者模式
本文URL:http://jinyejixie.com/article38/iiscsp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設、網(wǎng)站收錄、營銷型網(wǎng)站建設、網(wǎng)站導航、電子商務、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)