版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、觀察者模式 OBSERVER 案例詳解1、Observer 案例在23種設(shè)計模式中,觀察者模式算是模式設(shè)計中的皇后,尤其是在我們做軟件設(shè)計過的過程中所體現(xiàn)的更是立足無窮,再說它好,還不如來個實例不是更簡單明了,我就把對其概念上的講解以注釋的方式寫在彳碼注釋中,如下所示:/首先我們需要先定義一個接口為:抽象觀察者publicinterfaceWatcher/再定義一個用來獲取更新信息接收的方法publicvoidupdateNotify(Contentcontent);/其次定義一個接口為:抽象被觀察者publicinterfaceWatched/在其接口中定義一個用來增加觀察者的方法publi
2、cvoidadd(Watcherwatcher);/再定義一個用來刪除觀察者權(quán)利的方法publicvoidremove(Watcherwatcher);/再定義一個可以實現(xiàn)行為變現(xiàn)并向觀察者傳輸信息的方法publicvoidnotifyWatcher(Contentcontent);/再次就是定義一個類為:具體觀察者并實現(xiàn)其接口抽象觀察者publicclassConcreteWatcherimplementsWatcher/并覆蓋其方法publicvoidupdateNotify(Contentcontent)intid=content.getId();Stringname=content.g
3、etName();Stringaddress=content.getAddress();System.out.println(id:+id+/nname:+name+/naddress:+address);/最后就是定義一個類為:具體被觀察者并實現(xiàn)其抽象接口抽象被觀察者publicclassConcreteWatchedimplementsWatched/定義一個List來封裝WatcherprivateListlist=newArrayList();/并覆蓋其方法publicvoidadd(Watcherwatcher)list.add(watcer);publicvoidremove(Wa
4、tcherwatcher)list.remove(watcher);publicvoidnotifyWatcher(Contentcontent)for(Watcherwatcher:list)watcher.updateWatcher(content);/以面向?qū)ο蟮姆绞絹聿僮?,需要定義一個實體來進行操作privateintid;privateStringname;privateStringaddress;publicvoidsetId(intid)this.id=id;publicintgetId()returnid;publicvoidsetNameS
5、=name;publicStringgetName()returnname;publicvoidsetAddress(Stringaddress)this.address=address;publicStringgetAddress()returnaddress/測試類publicclasssTestpublicstaticvoidmain(Stringargs)/實例一個被觀察者Watchedwatched=newWatched();/實例第一個觀察者對被觀察者進行觀察Watcherwatcherl=newWatcher();/實例第二個觀察者對被觀察者進行觀察Watcherwatcher2
6、=newWatcher();/實例第三個觀察者對被觀察者進行觀察Watcherwatcher3=newWatcher();/加入對其觀察watched.add(watcherl);watched.add(watcher2);watched.add(watchre3);/當(dāng)被觀察者發(fā)生變化時:調(diào)用其信息方法Contentcontent=newContent();content.setId(0001);content.setName(jiangshide);content.setAddress(beijing);watched.notifyWatchers(content);/被觀察者可以調(diào)用刪除
7、方法watched.remove(watchr2);content.setName=litian;watched.notifyWatchers(content);好了,以上就是一個完整的對觀察者模式設(shè)計的核心代碼體現(xiàn)是一個多對一的關(guān)系,也就是一個被觀察者可同時被多個觀察者所共同進行關(guān)注新時,同時對其觀察者會自動更新其信息,為此我又深入的理解并構(gòu)建了一個2、核心框架代碼packagecom.jsd.observer.app;/*主抽象被觀察者*authorjiangshide*/abstractclassMainSubjectabstractvoidaddObserver(MainObserve
8、rmainObserver);abstractvoidremoveObserver(MainObservermainObserver);abstractvoidnotifyObservers(MainContentMainContent);publicvoidlocalNofity()packagecom.jsd.observer.app;/*主抽象觀察者*authorjiangshide*/abstractclassMainObserver,由上面可以知,觀察者與被觀察者,當(dāng),被觀察者更UML圖:abstractvoidupdataNotyfy(MainContentmainContent)
9、;publicvoidlocalNotify()packagecom.jsd.observer.app;/*主內(nèi)容提供支持*authorjiangshide*/publicclassMainContentprivateintId;privateStringname;publicintgetId()returnId;publicvoidsetId(intid)Id=id;publicStringgetName()returnname;publicvoidsetName(Stringname)=name;packagecom.jsd.observer.app;/*MSN抽象觀察者
10、類并繼承主抽象觀察者*authorjiangshide*/abstractclassMsnObserverextendsMainObserverabstractvoidmsnNotify();packagecom.jsd.observer.app;/* MSN抽象被觀察者并繼承了主抽象被觀察者* authorjiangshide*/abstractclassMsnSubjectextendsMainSubjectpackagecom.jsd.observer.app;/* Msn內(nèi)容提供者* authorjiangshide*/publicclassMsnContentextendsMainC
11、ontentprivateintlocalId;privateStringlocalName;privateStringmsnContent;privateStringfromResouce;privateStringfromTime;publicintgetLocalId()returnlocalId;publicvoidsetLocalId(intlocalId)this.localId=localId;publicStringgetLocalName()returnlocalName;publicvoidsetLocalName(StringlocalName)this.localNam
12、e=localName;publicStringgetMsnContent()returnmsnContent;publicvoidsetMsnContent(StringmsnContent)this.msnContent=msnContent;publicStringgetFromResouce()returnfromResouce;publicvoidsetFromResouce(StringfromResouce)this.fromResouce=fromResouce;publicStringgetFromTime()returnfromTime;publicvoidsetFromT
13、ime(StringfromTime)this.fromTime=fromTime;packagecom.jsd.observer.app;importjava.util.ArrayList;importjava.util.List;/* MSN絕對被觀察者類繼承了MSNtt象被觀察者類* authorjiangshide* /publicclassMsnConcreteSubjectextendsMsnSubjectprivateListlist=newArrayList();MainObservermsnObserver=newMsnConcreteObserver();MainObser
14、vernewsObserver=newNewsConcreteObserver();OverridevoidaddObserver(MainObservermainObserver)/TODOAuto-generatedmethodstubif(mainObserver.equals(msnObserver)/添加關(guān)注MSN?肖息的人list.add(msnObserver);elseif(mainObserver.equals(newsObserver)/添加關(guān)注NEW漸聞的人list.add(newsObserver);else/沒有想加入任何關(guān)注的人OverridevoidnotifyO
15、bservers(MainContentmainContent)/TODOAuto-generatedmethodstubfor(MainObservermainObservers:list)if(mainObservers.equals(msnObserver)mainContent=newMsnContent();OverridevoidremoveObserver(MainObservermainObserver)/TODOAuto-generatedmethodstubif(mainObserver.equals(msnObserver)/刪除此刻有關(guān)注MSN?肖息的人list.rem
16、ove(msnObserver);elseif(mainObserver.equals(newsObserver)/刪除此刻有關(guān)注NEWff聞的人list.remove(newsObserver);packagecom.jsd.observer.app;/* MSN絕對觀察者繼承了MSNt象觀察者* authorjiangshide*/publicclassMsnConcreteObserverextendsMsnObserverOverridepublicvoidupdataNotyfy(MainContentmainContent)/TODOAuto-generatedmethodstub
17、OverridevoidmsnNotify()/TODOAuto-generatedmethodstubpackagecom.jsd.observer.app;/*NEWS抽象觀察者并繼承了主抽象觀察者*authorjiangshide*/abstractclassNewsObserverextendsMainObserver)packagecom.jsd.observer.app;/* NEWS抽象被觀察者繼承了主抽象被觀察者* authorjiangshide*/abstractclassNewsSubjectextendsMainSubject)packagecom.jsd.observ
18、er.app;/* NEWS內(nèi)容提供者并繼承了主內(nèi)容信息* authorjiangshide*/publicclassNewsContentextendsMainContentprivateintlocalId;privateStringlocalName;privateStringnewsContent;privateStringfromResource;privateStringlinkWeb;publicintgetLocalId()returnlocalld;)publicvoidsetLocalId(intlocalld)this.localld=localId;)publicStr
19、inggetLocalName()returnlocalName;)publicvoidsetLocalName(StringlocalName)this.localName=localName;)publicStringgetNewsContent()returnnewsContent;)publicvoidsetNewsContent(StringnewsContent)this.newsContent=newsContent;)publicStringgetFromResource()returnfromResource;)publicvoidsetFromResource(StringfromResource)this.fromResource=fromResource;)publicStringgetLinkWeb()returnlinkWeb;publicvoidsetLinkWeb(S
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《第二單元 多彩的游記 2 設(shè)計版面》教學(xué)實錄-2024-2025學(xué)年川教版信息技術(shù)(2019)四年級下冊
- 設(shè)計制作校園植物名片(教學(xué)實錄)2024-2025學(xué)年四年級上冊信息技術(shù)蘇科版
- 商品貿(mào)易采購合同范例
- 臨安區(qū)房產(chǎn)買賣合同范例
- 承包土地寫合同范例
- 2025年鎮(zhèn)江道路客貨運輸從業(yè)資格證b2考試題庫
- 員工激勵股合同范例
- 人工智能風(fēng)險治理報告(2024年)-構(gòu)建面向產(chǎn)業(yè)的人工智能安全治理實踐方案
- 版納租車合同范例
- 個人租房合同范例版
- 數(shù)學(xué)文化欣賞
- 脊柱區(qū)1教學(xué)講解課件
- KK5-冷切鋸操作手冊-20151124
- 人工智能對中學(xué)教學(xué)的影響與應(yīng)對策略
- 閉合導(dǎo)線自動計算表
- 分管學(xué)校安全、德育、后勤等業(yè)務(wù)副校長述職報告
- 筆試考試:HSK筆試(三級)真題模擬匯編(共603題)
- 全國城市一覽表-excel
- 國際金融課后習(xí)題答案(吳志明第五版)第1-9章
- 《WPS演示制作與設(shè)計》計算機應(yīng)用基礎(chǔ)高職??埔坏泉?含課件制作試題及答案)
- 《基于杜邦分析法周大福珠寶企業(yè)盈利能力分析報告(6400字)》
評論
0/150
提交評論