版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、觀察者模式 OBSERVER 案例詳解1、Observer 案例在23種設(shè)計(jì)模式中,觀察者模式算是模式設(shè)計(jì)中的皇后,尤其是在我們做軟件設(shè)計(jì)過的過程中所體現(xiàn)的更是立足無窮,再說它好,還不如來個(gè)實(shí)例不是更簡(jiǎn)單明了,我就把對(duì)其概念上的講解以注釋的方式寫在彳碼注釋中,如下所示:/首先我們需要先定義一個(gè)接口為:抽象觀察者publicinterfaceWatcher/再定義一個(gè)用來獲取更新信息接收的方法publicvoidupdateNotify(Contentcontent);/其次定義一個(gè)接口為:抽象被觀察者publicinterfaceWatched/在其接口中定義一個(gè)用來增加觀察者的方法publi
2、cvoidadd(Watcherwatcher);/再定義一個(gè)用來刪除觀察者權(quán)利的方法publicvoidremove(Watcherwatcher);/再定義一個(gè)可以實(shí)現(xiàn)行為變現(xiàn)并向觀察者傳輸信息的方法publicvoidnotifyWatcher(Contentcontent);/再次就是定義一個(gè)類為:具體觀察者并實(shí)現(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);/最后就是定義一個(gè)類為:具體被觀察者并實(shí)現(xiàn)其抽象接口抽象被觀察者publicclassConcreteWatchedimplementsWatched/定義一個(gè)List來封裝WatcherprivateListlist=newArrayList();/并覆蓋其方法publicvoidadd(Watcherwatcher)list.add(watcer);publicvoidremove(Wa
4、tcherwatcher)list.remove(watcher);publicvoidnotifyWatcher(Contentcontent)for(Watcherwatcher:list)watcher.updateWatcher(content);/以面向?qū)ο蟮姆绞絹聿僮?,需要定義一個(gè)實(shí)體來進(jìn)行操作privateintid;privateStringname;privateStringaddress;publicvoidsetId(intid)this.id=id;publicintgetId()returnid;publicvoidsetNameS
5、=name;publicStringgetName()returnname;publicvoidsetAddress(Stringaddress)this.address=address;publicStringgetAddress()returnaddress/測(cè)試類publicclasssTestpublicstaticvoidmain(Stringargs)/實(shí)例一個(gè)被觀察者Watchedwatched=newWatched();/實(shí)例第一個(gè)觀察者對(duì)被觀察者進(jìn)行觀察Watcherwatcherl=newWatcher();/實(shí)例第二個(gè)觀察者對(duì)被觀察者進(jìn)行觀察Watcherwatcher2
6、=newWatcher();/實(shí)例第三個(gè)觀察者對(duì)被觀察者進(jìn)行觀察Watcherwatcher3=newWatcher();/加入對(duì)其觀察watched.add(watcherl);watched.add(watcher2);watched.add(watchre3);/當(dāng)被觀察者發(fā)生變化時(shí):調(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);好了,以上就是一個(gè)完整的對(duì)觀察者模式設(shè)計(jì)的核心代碼體現(xiàn)是一個(gè)多對(duì)一的關(guān)系,也就是一個(gè)被觀察者可同時(shí)被多個(gè)觀察者所共同進(jìn)行關(guān)注新時(shí),同時(shí)對(duì)其觀察者會(huì)自動(dòng)更新其信息,為此我又深入的理解并構(gòu)建了一個(gè)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絕對(duì)被觀察者類繼承了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絕對(duì)觀察者繼承了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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版高新技術(shù)產(chǎn)業(yè)廠房使用權(quán)出讓合同3篇
- 陜西省漢中市部分學(xué)校聯(lián)考2024-2025學(xué)年高二上學(xué)期期末考試歷史試題(含答案)
- 2025年度電影后期導(dǎo)演聘用及視覺效果合同3篇
- Unit 3 English Around the World Topic 3 Section B 說課稿 - 2024-2025學(xué)年仁愛科普版英語九年級(jí)上冊(cè)
- Unit 3 The world of Science Using language 現(xiàn)在完成時(shí)的被動(dòng)語態(tài)說課稿-2023-2024學(xué)年高中英語外研版(2019)必修第三冊(cè)
- Unit 6 Useful numbers (Period 3)(說課稿)-2024-2025學(xué)年人教PEP版(2024)英語三年級(jí)上冊(cè)
- 湖北省咸寧市(2024年-2025年小學(xué)六年級(jí)語文)部編版隨堂測(cè)試(下學(xué)期)試卷及答案
- 2025年度綠色信貸項(xiàng)目融資合同2篇
- 新疆昌吉回族自治州(2024年-2025年小學(xué)六年級(jí)語文)統(tǒng)編版開學(xué)考試(上學(xué)期)試卷及答案
- 貴州農(nóng)業(yè)職業(yè)學(xué)院《中醫(yī)推拿學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 醫(yī)療組長(zhǎng)競(jìng)聘
- 2022年公司出納個(gè)人年度工作總結(jié)
- 四年級(jí)北京版數(shù)學(xué)上學(xué)期應(yīng)用題專項(xiàng)針對(duì)練習(xí)
- 職業(yè)安全健康現(xiàn)場(chǎng)檢查記錄表參考范本
- 雨水、排水管道工程質(zhì)量保證措施
- 荒誕派戲劇演示
- 公園景觀改造工程施工組織設(shè)計(jì)方案
- 全國(guó)書法作品展投稿登記表
- 鏈條功率選用
- 年產(chǎn)30萬噸合成氨脫碳工段工藝設(shè)計(jì)
- 塑膠產(chǎn)品成型周期公式及計(jì)算
評(píng)論
0/150
提交評(píng)論