資源描述:
《設(shè)計模式綜合實現(xiàn)含源碼(策略模式 適配器模式 裝飾者模式 抽象工廠模式 迭代器和組合模式 觀察者模式)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、軟件構(gòu)造第6次實驗實驗報告班級:學號:姓名:2016年4月27日一.設(shè)計(由于類較多,很難清晰地展示,類圖將作為附件與該文檔同時上交。)本次實驗旨在合理地將一群設(shè)計模式結(jié)合起來以解決一般性問題,其中包括了策略模式、適配器模式、裝飾者模式、抽象工廠模式、迭代器和組合模式以及觀察者模式。大致的思路如下:①鵝想要偽裝成鴨子——適配器模式;②鴨子學家想要統(tǒng)計叫聲的次數(shù)——裝飾者模式。通過把鴨子包裝給裝飾者對象,讓鴨子具有新行為,即統(tǒng)計叫的次數(shù);③為了確保所有的鴨子都添加了裝飾者——27抽象工廠模式。我們通過抽象工廠模式來創(chuàng)建鴨子,以確保質(zhì)量達到要求;①為了便于管理,將鴨子集結(jié)成鴨群
2、——迭代器和組合模式。這其實是一個樹狀結(jié)構(gòu),利用迭代器進行遍歷使得管理更加方便;②當鴨子叫時,鴨子學家想要被告知——觀察者模式。實現(xiàn)這個功能的過程中同樣用到了迭代器,學家不僅可以當某個鴨子的觀察者,甚至可以當一整群鴨子的觀察者。③這個鴨子游戲還沒有考慮飛行、游泳等行為,并且想要動態(tài)修改鴨子的行為——策略模式;④“雞”也想偽裝成鴨子——適配器模式;⑤想要統(tǒng)計鴨子飛行、游泳的次數(shù)——觀察者模式;⑥讓鴨子飛行時通知——觀察者模式。(鴨子游戲的拓展過程中出現(xiàn)的重要的具體問題請見“三”。)二.實現(xiàn)1.QuackBehaviorpackageQuackable;publicinterf
3、aceQuackBehavior{voidquack();}2.HonkpackageQuackable;importElse.Observer;//呱呱叫行為之一publicclassHonkimplementsQuackBehavior{publicvoidquack(){System.out.println("---Honk---");}27}3.KwakpackageQuackable;importElse.Observer;//呱呱叫行為之一publicclassKwakimplementsQuackBehavior{publicvoidquack(){Syste
4、m.out.println("---Kwak---");}}4.QuackpackageQuackable;importElse.Observer;//呱呱叫行為之一publicclassQuackimplementsQuackBehavior{publicvoidquack(){System.out.println("---Quack---");}}5.SqueakpackageQuackable;importElse.Observer;//呱呱叫行為之一publicclassSqueakimplementsQuackBehavior{publicvoidquack(){
5、System.out.println("---Squeak---");}}6.WowpackageQuackable;publicclassWowimplementsQuackBehavior{publicvoidquack(){System.out.println("---Wow---");}27}7.FlyablepackageFlyable;importElse.*;publicinterfaceFlyable{voidfly();}8.FlyNoWaypackageFlyable;publicclassFlyNoWayimplementsFlyable{public
6、voidfly(){System.out.println("[Flynoway]");}}9.FlyWithWingspackageFlyable;publicclassFlyWithWingsimplementsFlyable{publicvoidfly(){System.out.println("[Flywithwings]");}}10.SwimablepackageSwimable;publicinterfaceSwimable{voidswim();}11.SwimInSomeWaypackageSwimable;publicclassSwimInSomeWayi
7、mplementsSwimable{publicvoidswim(){System.out.println("Swiminsomeway.");}}2712.SwimNoWaypackageSwimable;publicclassSwimNoWayimplementsSwimable{publicvoidswim(){System.out.println("Swimnoway.");}}13.DuckpackageKindsOfDucks;importElse.Observer;importFlyable.Flya