12設(shè)計(jì)1班設(shè)計(jì)模式源碼及報(bào)告書_第1頁(yè)
12設(shè)計(jì)1班設(shè)計(jì)模式源碼及報(bào)告書_第2頁(yè)
12設(shè)計(jì)1班設(shè)計(jì)模式源碼及報(bào)告書_第3頁(yè)
12設(shè)計(jì)1班設(shè)計(jì)模式源碼及報(bào)告書_第4頁(yè)
12設(shè)計(jì)1班設(shè)計(jì)模式源碼及報(bào)告書_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、2014-2015 學(xué)年第二學(xué)期設(shè)計(jì)模式大作業(yè)課題名稱:設(shè)計(jì)模式在 Duck 模擬器設(shè)計(jì)中的應(yīng)用班 級(jí):12 級(jí)設(shè)計(jì)一班 學(xué) 號(hào):1215115401:成 績(jī):2015 年 6 月 1 日設(shè)計(jì)模式的聯(lián)用:模式通常被一起使用,組合到一個(gè)設(shè)計(jì)方案中;復(fù)合模式在一個(gè)解決方案中結(jié)合兩個(gè)或多個(gè)設(shè)計(jì)模式,以解決一些重復(fù)發(fā)生在設(shè)計(jì)模式之策略模式里,介紹了有關(guān)設(shè)計(jì)模式中的策略模式的一些概念,和設(shè)計(jì)原則。模式,原則,方法等最終都是為了應(yīng)用而服務(wù)的。在這里把它應(yīng)用到一個(gè)關(guān)于鴨子的設(shè)計(jì)中去,一起來(lái)探討一下它的實(shí)際應(yīng)用,感受一下它帶來(lái)了什么!設(shè)計(jì)描述以及類圖創(chuàng)建鴨子的飛行接口 FlyBehavior分別創(chuàng)建三個(gè)飛行類

2、來(lái)實(shí)現(xiàn) FlyBehavior 接口什么都不會(huì)做不會(huì)叫的鴨子類MuteQuackMuteQuackquack( )Quackquack( )發(fā)出嘎嘎的類QuackQuackBehaviorquack( )創(chuàng)建鴨子發(fā)出行為的接口QuackBehaviorFlyRocketeredfly( )使用火箭的類 FlyRocketeredFlyWithWingsfly( )可以飛行的類 FlyWithWingsFlyNoWayfly( )不能飛行的類 FlyNoWayFlyBehaviorfly( )呱呱叫的類Squeak創(chuàng)建鴨子的抽象類Duck野鴨子 MallardDuck模型鴨 MDuck優(yōu)點(diǎn):1、

3、 提供了一種替代繼承的方法,而且既保持了繼承的優(yōu)點(diǎn)(代碼重用)還比繼承更靈活(算法獨(dú)立,可以任意擴(kuò)展)。2、 避免程序中使用多重條件轉(zhuǎn)移語(yǔ)句,使系統(tǒng)更靈活,并易于擴(kuò)展。3、 遵守大部分 GRASP 原則和常用設(shè)計(jì)原則,高內(nèi)聚、低偶合。缺點(diǎn):策略模式有好的一方面也有壞的方面。MDuckMDuck()display()MallardDuckMallardDuck()display()Duckdisplay()performFly()performQuack()swim()setFlyBehavior()setQuackBehavior()Squeakquack( )1、 因?yàn)槊總€(gè)具體策略類都會(huì)產(chǎn)生

4、一個(gè)新類,所以會(huì)增加系統(tǒng)需要的類的數(shù)量2、Strategy 和 Context 之間的通信開銷增大。根據(jù)算法的需要,Context 必須向每個(gè)不同的具體 Strategy 類實(shí)例傳遞不同的參數(shù)。導(dǎo)致 Context 會(huì)創(chuàng)建和傳遞一些用不到的參數(shù)。現(xiàn)在來(lái)總結(jié)一下,鴨子的行為被放在分開的類中,此類專門提供某行為的實(shí)現(xiàn)。這 樣 , 鴨 子 類 就 不 再 需 要 知 道 行 為 的 實(shí) 現(xiàn) 細(xì) 節(jié) 。鴨子類不會(huì)負(fù)責(zé)實(shí)現(xiàn) Flyable 與 Quackable 接口,反而是由其他類專門實(shí)現(xiàn) FlyBehavior 與QuackBehavior,這就稱為行為類。由行為類實(shí)現(xiàn)行為接口, 而不是由 Duck

5、 類實(shí)現(xiàn)行為接口。這樣的作法迥異于以往,行為不再是由繼承 Duck 超類的具體實(shí)現(xiàn)而來(lái), 或是繼承某個(gè)接口并由子類自行實(shí)現(xiàn)而來(lái)。(這兩種作法都是依賴于實(shí)現(xiàn),被實(shí)現(xiàn)綁得死死的,)沒(méi)辦法更改行為,除非寫代在所碼。的新設(shè)計(jì)中, 鴨子的子類使用接口( FlyBehavior 與 QuackBehavior)所表示的行為,以實(shí)際的實(shí)現(xiàn)不會(huì)被綁死在鴨子的子類中。( 換句話說(shuō),特定的實(shí)現(xiàn)代碼位于實(shí)現(xiàn) FlyBehavior 與 QuakcBehavior的特定類中),這樣就獲得了更大的靈活性和可擴(kuò)展性。基礎(chǔ):抽象、封裝、多態(tài)、繼承原則:封裝變化、多用組合,少用繼承、針對(duì)接口編程,不針對(duì)實(shí)現(xiàn)編程策略模式:定義

6、算法族,分別封裝起來(lái),讓它們之間可以互相替換,此模式讓算法的變化獨(dú)立于使用算法的客戶1.代碼結(jié)構(gòu)總結(jié):2.主方法package miniduck;import duck.Duck;import duck.MallardDuck;import duck.MDuck;import fly.FlyRocketered;public class MiniDuckSimulator public sic void main(String args) Duck mallard = new MallardDuck(); mallard.perfornFly(); mallard.performQuack()

7、;System.out.prln();Duck m= new MDuck();m mm.perfornFly();.setFlyBehavior(new FlyRocket.perfornFly();ered();3. package叫的行為接口package quack;publicerface QuackBehavior public void quack();嘎嘎叫 package quack;public class Quack implements QuackBehaviorOverridepublic void quack() System.out.prln(Quack);/ TO

8、DO Auto-generated method stub什么都不做,不會(huì)叫 package quack;public class MuteQuack implements QuackBehaviorOverridepublic void quack() System.out.prln();/ TODO Auto-generated method stub呱呱叫 package quack;public class Squeak implements QuackBehavior Overridepublic void quack() System.out.prln(Squeak);/ TODO

9、 Auto-generated method stub4.飛行 package鴨子飛行接口 package fly;publicerface FlyBehavior public void fly();不能飛行的類package fly;public class FlyNoWay implements FlyBehavior Overridepublic void fly() System.out.prln(I cant fly);/ TODO Auto-generated method stub可以飛行的類package fly;public class FlyWithWings imple

10、ments FlyBehaviorOverridepublic void fly() System.out.prln(Im flying!);/ TODO Auto-generated method stub使用火箭助推器進(jìn)行飛行package fly;public class FlyRocketered implements FlyBehavior Overridepublic void fly() System.out.prln(Im flying wirocket);/ TODO Auto-generated methodstub5.鴨子 package package duck;imp

11、ort fly.FlyBehavior;import quack.QuackBehavior;public abstract class Duck FlyBehavior flyBehavior;QuackBehavior quackBehavior;public abstract void display();public void perfornFly()flyBehavior.fly();public void performQuack()quackBehavior.quack();public void swim()System.out.prln(All ducks float,eve

12、n decoys);public void setFlyBehavior(FlyBehavior flyBehavior)this.flyBehavior = flyBehavior;public void setQuackBehavior(QuackBehavior quackBehavior)this.quackBehavior = quackBehavior;野鴨子package duck;import fly.FlyWithWings;import quack.Quack;public class MallardDuck extends Duck public MallardDuck()quackBehavior = new Quack();flyBehavior = new FlyWithWings();Overridepublic void display() System.out.prln(Im a real Mallard duck);/ TODO Auto-generated method stub模型鴨 package duck;import fly.FlyNoWay;import quack.Q

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論