androidObserver觀察者模式案例祥解_第1頁
androidObserver觀察者模式案例祥解_第2頁
androidObserver觀察者模式案例祥解_第3頁
androidObserver觀察者模式案例祥解_第4頁
androidObserver觀察者模式案例祥解_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論