![androidObserver觀察者模式案例祥解_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/8/1e29ae90-9db5-480c-9c26-520415535cd2/1e29ae90-9db5-480c-9c26-520415535cd21.gif)
![androidObserver觀察者模式案例祥解_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/8/1e29ae90-9db5-480c-9c26-520415535cd2/1e29ae90-9db5-480c-9c26-520415535cd22.gif)
![androidObserver觀察者模式案例祥解_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/8/1e29ae90-9db5-480c-9c26-520415535cd2/1e29ae90-9db5-480c-9c26-520415535cd23.gif)
![androidObserver觀察者模式案例祥解_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/8/1e29ae90-9db5-480c-9c26-520415535cd2/1e29ae90-9db5-480c-9c26-520415535cd24.gif)
![androidObserver觀察者模式案例祥解_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/8/1e29ae90-9db5-480c-9c26-520415535cd2/1e29ae90-9db5-480c-9c26-520415535cd25.gif)
下載本文檔
版權(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ū)ο蟮姆绞絹聿僮鳎枰x一個實體來進行操作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);/當被觀察者發(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,由上面可以知,觀察者與被觀察者,當,被觀察者更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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度新能源汽車充電樁建設(shè)合同授權(quán)委托書范本
- 2025年度能源行業(yè)勞務(wù)派遣與能源效率提升合同
- 2025年度關(guān)鍵供應(yīng)商信息保密及合作合同
- 2025年度廣告公司客戶經(jīng)理銷售業(yè)績合同
- 未來綠色建筑的技術(shù)趨勢與市場預(yù)測
- 2025年度股東借款合同范本:智能制造領(lǐng)域投資合作
- 2025年度個人房產(chǎn)借款擔保合同
- 2025年度光伏發(fā)電項目融資合作協(xié)議
- 2025年度工業(yè)用塑料產(chǎn)品研發(fā)與生產(chǎn)合同
- 2025年中國戶用光伏行業(yè)發(fā)展現(xiàn)狀調(diào)查、競爭格局分析及未來前景預(yù)測報告
- 2024年版:煤礦用壓力罐設(shè)計與安裝合同
- 甲狀腺的科普宣教
- 《算法定價壟斷屬性問題研究的國內(nèi)外文獻綜述》4200字
- 2024年04月浙江義烏農(nóng)商銀行春季招考筆試歷年參考題庫附帶答案詳解
- 涉密計算機保密培訓(xùn)
- 2024年浙江省五校聯(lián)盟高考地理聯(lián)考試卷(3月份)
- 在線心理健康咨詢行業(yè)現(xiàn)狀分析及未來三至五年行業(yè)發(fā)展報告
- 電動三輪車購銷合同
- 淋巴瘤的免疫靶向治療
- 校園駐校教官培訓(xùn)
- 炎癥性腸病的自我管理
評論
0/150
提交評論