<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Strategy(策略模式)


    設計原則
    ?????? #找出應用中可能需要變化之處,把它們獨立出來,不要和不需要變化的代碼混在一起(即使是行為)
    ????? #針對接口編程,而不是針對實現編程。(實例化對象時使用多態)
    ????? #多用組合,少用繼承

    策略模式:定義了算法族,分別封裝起來,讓他們可以互相替換,此模式讓算法的變化獨立與使用算法的客戶

    Strategy模式的UML類別結構圖如下:

    Strategy2.jpg
    環境:顧客或用戶需要別的東西,或者想要新動能;公司決定采用別的數據庫產品,又從另一家廠商買了數據,造成數據格式不兼容

    :一群鴨子,有些會飛,有些會叫,有些會游泳等,會添加新功能。不同種類的特性不一樣
    ???
    用Strategy實現,UML圖如下:
    Strategy1.jpg


    ?代碼:FlyBehavior.java (將飛行行為封裝成接口)
    1?public?interface?FlyBehavior?{
    2?????void?fly();
    3?}
    ??????
    ? ? ?? FlyWithWings.java (具體實現接口的類)
    1?public?class?FlyWithWings?implements?FlyBehavior?{
    2?????public?void?fly()?{
    3?????????System.out.println("I'm?is?flying");
    4?????????
    5?????}
    6}

    ???? ? FlyNoWay.java
    1?public?class?FlyNoWay?implements?FlyBehavior?{
    2?????public?void?fly()?{
    3?????????System.out.println("I?can't?fly!");
    4?????}
    5?}
    6?

    ?????? QuackBehavior.java(將叫喊行為封裝成接口)
    1 public?interface?QuackBehavior?{
    2????
    void?Qquack();
    3 }

    ?????? Quack.java(具體實現叫喊的類)
    1?public?class?Quack?implements?QuackBehavior?{
    2?????public?void?Qquack()?{
    3?????????System.out.println("quack,quack");
    4?????}
    5?}
    6?
    ?????? Squeak.java MuteQuack.java 類似的實現叫喊接口的類
    ?????? ........................

    ?????
    ?????? Duck.java
    ??
    ?1?public?abstract?class?Duck?{
    ?2?????FlyBehavior?flyBehavior;
    ?3?????QuackBehavior?quackBehavior;
    ?4?????
    ?5?????public?void?Swin()?{
    ?6?????????System.out.println("I'm?swining!");
    ?7?????}
    ?8?????
    ?9?????public?abstract?void?display();
    10?????
    11?????public?void?performFly()?{?
    12?????????flyBehavior.fly();
    13?????}
    14?????
    15?????public?void?performQuack()?{
    16?????????quackBehavior.Qquack();
    17?????}
    18?
    19?????public?void?setFlyBehavior(FlyBehavior?flyBehavior)?{
    20?????????this.flyBehavior?=?flyBehavior;
    21?????}
    22?
    23?????public?void?setQuackBehavior(QuackBehavior?quackBehavior)?{
    24?????????this.quackBehavior?=?quackBehavior;
    25?????}
    26?????
    27?????
    28?}

    ?????? MallardDuck.java
    ?
    ?1?public?class?MallardDuck?extends?Duck?{
    ?2?????public?MallardDuck()?{
    ?3?????????flyBehavior?=?new?FlyNoWay();
    ?4?????????quackBehavior?=?new?Quack();
    ?5?????}
    ?6?????
    ?7?????@Override
    ?8?????public?void?display()?{
    ?9?????????System.out.println("I'm?a?MallarDuck!");
    10?
    11?????}
    12?
    13?}
    14?

    ?????? RedheadDuck? RubberDuck 類似繼承Duck實現以上方法....

    ?????? 最后Main.java....
    ?1?public?class?Main?{
    ?2?????public?static?void?main(String[]?args)?{
    ?3?????????Duck?mallardDuck?=?new?MallardDuck();
    ?4?????????mallardDuck.display();
    ?5?????????mallardDuck.performQuack();
    ?6?????????mallardDuck.performFly();
    ?7?????????System.out.println();
    ?8?????????
    ?9?????????Duck?redheadDuck?=?new?RedheadDuck();
    10?????????redheadDuck.display();
    11?????????redheadDuck.performQuack();
    12?????????redheadDuck.performFly();
    13?????????System.out.println();
    14?}

    ? 若想增加一個模型鴨,原本不會FLY,后面加了火箭會飛了,
    ? 首先,添加個繼承Duck的ModelDuck類.方法與上面相似,然后添加個實現飛行接口的類.

    ? FlyRocketPower.java
    1?public?class?FlyRocketPower?implements?FlyBehavior?{
    2?????public?void?fly()?{
    3?????????System.out.println("I'm?flying?with?a?rocket!");
    4?
    5?????}
    6?}
    7?

    ? 在Main類中加一下:
    ?
    1?Duck?modelDuck?=?new?ModelDuck();
    2?????????modelDuck.performQuack();
    3?????????modelDuck.performFly();
    4?????????modelDuck.setFlyBehavior(new?FlyRocketPower());
    5?????????modelDuck.performFly();
    ?
    ? 運行下,一切皆有可能~~~
    ??????

    posted on 2008-09-04 18:48 nonels 閱讀(219) 評論(0)  編輯  收藏 所屬分類: DesignPattern


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2008年9月>
    31123456
    78910111213
    14151617181920
    21222324252627
    2829301234
    567891011

    導航

    統計

    常用鏈接

    留言簿(2)

    隨筆分類(16)

    隨筆檔案(16)

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 欧洲乱码伦视频免费| 日韩在线天堂免费观看| 久久亚洲AV成人无码电影| 国产成人免费网站| 免费无码又爽又黄又刺激网站 | 亚洲精品成人区在线观看| 99视频在线观看免费| 激情综合亚洲色婷婷五月| mm1313亚洲精品无码又大又粗| a视频在线观看免费| 亚洲AV无码成人网站在线观看| 婷婷久久久亚洲欧洲日产国码AV| 免费鲁丝片一级在线观看| a成人毛片免费观看| 亚洲heyzo专区无码综合| 亚洲AV无码一区二区三区DV| 日韩亚洲国产二区| 国产精品免费观看| 久青草视频97国内免费影视| 亚洲国产区男人本色在线观看| 亚洲AV无码成人精品区蜜桃| 四只虎免费永久观看| a拍拍男女免费看全片| 黄 色一级 成 人网站免费| 亚洲午夜精品一区二区麻豆| 亚洲成在人天堂在线| 亚洲精品国产日韩无码AV永久免费网 | 国产亚洲视频在线观看网址| 亚洲国产精品网站久久| 亚洲日韩精品射精日| 四虎影永久在线高清免费| 69堂人成无码免费视频果冻传媒| 最近更新免费中文字幕大全| 在线观看亚洲精品专区| 亚洲国产精品免费在线观看| 亚洲第一区香蕉_国产a| 中文字幕无码精品亚洲资源网| 国产精品va无码免费麻豆| 97无码免费人妻超级碰碰碰碰 | 中国人xxxxx69免费视频| 国产精品免费一区二区三区四区|