付費下載
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
設(shè)計模式(Designpattern)是一套被反復(fù)使用、多數(shù)人知曉的、代碼、讓代碼更容易被他人理解、保證代碼可靠性。,設(shè)是工程的基石,同的一塊塊磚石一樣。項與描述了一個在周圍不斷重復(fù)發(fā)生的問題,以及該問題的決方案,這也是它能被廣泛用的原因。問題描述 Quacklogist中統(tǒng)計通知它的鴨子的個數(shù),在一個中統(tǒng)計像鴨子一樣叫的bird的個數(shù),對二者進(jìn)行比較。不使用設(shè)計模式的求解開發(fā)一個Duck鴨子模擬系開始選用繼承機制操作。定義一個鴨子抽象類別Duck,具有一些預(yù)設(shè)的鴨子動作方法swim(),fly(),quack(),以及一個顯示鴨子的方法display().衍生的實體鴨子類別(紅頭鴨,綠頭鴨)繼承Duck的各種動作,并復(fù)寫自己的現(xiàn)在系統(tǒng)加入一個新類別橡皮鴨RubberDuck,但事后橡皮鴨繼承了一個來自Duck的fly()方法,所以會發(fā)現(xiàn)應(yīng)該不會飛的RubberDuck現(xiàn)在可以飛來飛去。因為新加入的類別行為會改變,所以須將會變動的部分封代碼實現(xiàn):從一Quackable定義一個鴨子接口,包含了對“鳴叫”的:packagepublicinterfacepublicvoidquack();}某些鴨子實Quackable接口:packageducks;publicclassMallardDuckimplements{publicvoidquack(){publicStringtoString(){return"MallardDuck";}}packagepublicclassRedheadDuckimplements{publicvoidquack(){publicStringtoString(){return"RedheadDuck";}}加入的鴨子packagepublicclassDuckCallimplements{publicvoidquack(){publicStringtoString(){return"DuckCall";}}packagepublicclassRubberDuckimplements{publicvoidquack(){publicStringtoString(){return"RubberDuck";}}創(chuàng)建鴨子模擬器packagepublicclassDuckSimulatorpublicstaticvoidmain(String[]args)DuckSimulatorsimulator=newDuckSimulator();voidsimulate()QuackablemallardDuck=newMallardDuck();QuackableredheadDuck=newRedheadDuck();QuackableduckCall=newDuckCall();QuackablerubberDuck=newRubberDuck();System.out.println("\nDuckSimulator");voidsimulate(Quackable{創(chuàng)建Birdpackagepublicclass{publicvoid{System.out.println("Honk");在這里采用適配器模式,使Bird與鴨子參雜在一packageadapter;publicclassBirpterimplements{protectedBirdpublicBirpter(Goose{this.goose=goose;}publicvoidquack(){publicStringtoString()return"Goosepretendingtobea模擬器中出現(xiàn)Bird:packageadapter;importducks.DuckCall;importducks.MallardDuck;importducks.Quackable;importducks.RedheadDuck;importducks.RubberDuck;publicclassDuckSimulator{publicstaticvoidmain(String[]{DuckSimulatorsimulator=newDuckSimulator();simulator.simulate();}voidsimulate()QuackablemallardDuck=newMallardDuck();QuackableredheadDuck=newRedheadDuck();QuackableduckCall=newDuckCall();QuackablerubberDuck=newRubberDuck();QuackablegooseDuck=newBirpter(newGoose());System.out.println("\nDuckSimulator:Withvoidsimulate(Quackable{實驗結(jié)果 :這 packagedecorator;publicclassQuackCounterimplements{protectedQuackableduck;protectedstaticintnumberOfQuacks;publicQuackCounter(Quackableduck){this.duck=duck;}publicvoidquack(){publicstaticint{returnnumberOfQuacks;}publicStringtoString(){return更新模擬器,創(chuàng)建被裝飾的鴨packagedecorator;importadapter.Goose;importadapter.GooseAdapter;importducks.DuckCall;importducks.MallardDuck;importducks.Quackable;importducks.RedheadDuck;importducks.RubberDuck;publicclassDuckSimulator{publicstaticvoidmain(String[]{DuckSimulatorsimulator=newDuckSimulator();voidsimulate()QuackablemallardDuck=newQuackCounter(newQuackableredheadDuck=newQuackCounter(newQuackableduckCall=newQuackCounter(newQuackablerubberDuck=newQuackCounter(newQuackablegooseDuck=newSystem.out.println("\nDuckSimulator:WithSystem.out.println("Theducksquacked"+QuackCounter.getQuacks()+"times");}voidsimulate(Quackable{實驗結(jié)果此時又產(chǎn)生新的問題,能不能將創(chuàng)建鴨子們的程序都集中起來管理與包裝,此時需要工廠模式的介入:創(chuàng)建鴨子工packagefactory; {public createMallardDuck(); createRedheadDuck();public createDuckCall();public 創(chuàng)建工廠鴨packagefactory;importducks.DuckCall;importducks.Quackable;importducks.RubberDuckpublicclassDuckFactory {publicQuackablecreateMallardDuck(){returnnewMallardDuck();}publicQuackable{returnnewRedheadDuck();}publicQuackable{returnnewpublicQuackable{returnnewRubberDuck();}}packagefactory;importdecorator.QuackCounter;importducks.DuckCall;importducks.Quackable;importducks.RubberDuck;publicclassCountingDuckFactoryextendsDuckFactory{publicQuackablecreateMallardDuck()returnnewQuackCounter(newpublicQuackablecreateRedheadDuck()returnnewQuackCounter(newRedheadDuck());}publicQuackablecreateDuckCall(){returnnewQuackCounter(newDuckCall());}publicQuackablecreateRubberDuck(){returnnewQuackCounter(new使用模擬器來實驗該工廠鴨子packagefactory;importadapter.Goose;importadapter.GooseAdapter;importdecorator.QuackCounter;importducks.Quackable;publicclassDuckSimulator{publicstaticvoidmain(String[]{DuckSimulatorsimulator=newDuckSimulator();DuckFactoryduckFactory=newvoid DuckFactory{QuackablemallardDuck=QuackableredheadDuck=QuackableduckCall=duckFactory.createDuckCall();QuackablerubberDuck=QuackablegooseDuck=newGooseAdapter(newSystem.out.println("\nDuckSimulator:WithSystem.out.println("Theducksquacked"+QuackCounter.getQuacks()+"times");}voidsimulate(Quackableduck){實驗結(jié)果此時創(chuàng)建一群鴨子,使用集合的概念packageimportjava.util.ArrayList;importjava.util.Iterator;importducks.Quackable;publicclassFlockimplements{protectedArrayList<Quackable>quackers=publicvoidadd(Quackable{publicvoidquack()//迭代器模Iterator<Quackable>iterator=while(iterator.hasNext())Quackablequacker=iterator.next();publicString{return"Flockof修改模擬packagecomposite;importadapter.Goose;importadapter.GooseAdapter;importdecorator.QuackCounter;importducks.Quackable;importfactory.DuckFactory;importfactory.CountingDuckFactory;publicclassDuckSimulator{publicstaticvoidmain(String[]{DuckSimulatorsimulator=newDuckSimulator();DuckFactoryduckFactory=newvoid DuckFactory{QuackableredheadDuck=QuackableduckCall=duckFactory.createDuckCall();QuackablerubberDuck=QuackablegooseDuck=newGooseAdapter(newSystem.out.println("\nDuckSimulator:WithComposite-Flocks");FlockflockOfDucks=newFlock();FlockflockOfMallards=newFlock();QuackablemallardOne=QuackablemallardTwo=QuackablemallardThreeQuackablemallardFour=System.out.println("\nDuckSimulator:WholeFlockSystem.out.println("\nDuckSimulator:MallardFlockSimulation");System.out.println("\nTheducksquacked"++"voidsimulate(Quackable{實驗結(jié)果此時又該想到觀察個別鴨子的行為,能夠使用觀察者模式;定義Observer觀察者對象Observable中定義與觀察者方法,首先定義QuackObservable接口:packagepublicinterfaceQuackObservablepublicvoidregisterObserver(Observerobserver);publicvoidnotifyObservers();}Quackable實現(xiàn)該接口,同時Observable繼承接packageimportjava.util.Iterator;importjava.util.ArrayList;publicclassObservableimplements{ArrayList<Observer>observers=newQuackObservablepublicObservable(QuackObservable{this.duck=publicvoidregisterObserver(ObserverpublicvoidnotifyObservers(){Iterator<Observer>iterator=while(iterator.hasNext())Observerobserver=iterator.next();observer.update(duck)}}publicIterator<Observer>{return整合Observable與QuackablepackageimportpublicclassMallardDuck2extendsMallardDuckimplementsObservablepublicMallardDuck2()observable=newObservable(this);}publicvoidquack(){publicvoidregisterObserver(ObserverpublicvoidnotifyObservers(){ObserverpackagepublicinterfaceObserverpublicvoidupdate(QuackObservable需要一個觀察者監(jiān)督呱呱packagepublicclassQuackologistimplements{publicvoidupdate(QuackObservableduck)System.out.println("Quackologist:"+duck+"justpublicString{return更新模擬packageobserver;importadapter.Goose;publicclassDuckSimulatorpublicstaticvoidmain(String[]{DuckSimulatorsimulator=newDuckSimulator()
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 水庫防洪預(yù)案制定方案
- 江陰王瑞雪培訓(xùn)課件
- 外墻裝飾材料選型技術(shù)方案
- 多場景業(yè)務(wù)會議規(guī)劃手冊
- 給水設(shè)施應(yīng)急搶修方案
- 糧庫管理信息系統(tǒng)集成方案
- 儲備糧庫基礎(chǔ)設(shè)施建設(shè)技術(shù)方案
- 消防設(shè)施通信系統(tǒng)建設(shè)方案
- 現(xiàn)代物流管理高效運營手冊
- 2026年系統(tǒng)架構(gòu)師知識系統(tǒng)設(shè)計與實施方法測驗題目
- 服裝SKU知識培訓(xùn)課件
- 二零二五年度快遞運輸快遞網(wǎng)點加盟合作協(xié)議
- 相互抵款協(xié)議書范本
- (北師大版)八年級數(shù)學(xué)上冊(全冊)單元測試卷
- 電廠生產(chǎn)準(zhǔn)備管理制度
- 混凝土攪拌站試運行報告
- T/CCMA 0133-2022高爾夫球車
- ?;窇?yīng)急演練實操
- 胸部損傷的處理和護(hù)理
- 張家口市2025屆高三年級全市第二次模擬考試英語試題(含答案詳解)
- 干線公路養(yǎng)護(hù)培訓(xùn)課件
評論
0/150
提交評論