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

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

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

    Mark's Java Blog
    MyEclipse, Java EE, Spring, Struts, Hibernate, JPA, SWT, Swing, AJAX, JavaScript,SOA
       策略模式定義了算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化獨立于使用算法的客戶。

        個人理解:策略模式就是把父類中需要根據(jù)不同情況而變化的行為想成“一族算法”,并把它抽象出來變成兩個接口,在父類中包含這個接口類型的屬性,這樣就可以利用不同的接口實現(xiàn)類來改變這個行為。并且添加了getter,setter方法后可以在運行時隨意改變行為的實現(xiàn),這樣就可以使我們的設計更加富有彈性,可以使我們的設計更加易于維護和擴展。

    實例代碼:

    要求:所有的各類鴨子繼承一個超類,并且可以擁有自己的特性,可以因為需求變化而改變某個鴨子或某一類鴨子的某種特性(如可以改變叫聲和飛行狀態(tài))。

    //鴨子超類
    public abstract class Duck {
    //飛行狀態(tài)算法族
     FlyBehavior flyBehavior;
    //鳴叫狀態(tài)算法族
     QuackBehavior quackBehavior;
     
     public Duck() {
     }
     //改變算法組狀態(tài)的方法,可是在運行時改變特性的方法
     public void setFlyBehavior (FlyBehavior fb) {
      flyBehavior = fb;
     }
     
     public void setQuackBehavior(QuackBehavior qb) {
      quackBehavior = qb;
     }
     //由子類繼承并實現(xiàn)的鴨子特性(不會改變)
     abstract void display();
     //由子類繼承的飛行和鳴叫方法
     public void performFly() {
      flyBehavior.fly();
     }
     
     public void performQuack() {
      quackBehavior.quack();
     }
     
     public void swim() {
      System.out.println("All ducks float, even decoys!");
     }
    }

    //飛行接口
    public interface FlyBehavior {
     public void fly();
    }

    //飛行狀態(tài)實現(xiàn)類(不能飛)
    public class FlyNoWay implements FlyBehavior {
     public void fly() {
      System.out.println("I can't fly");
     }
    }

    //火箭助推器
    public class FlyRocketPowered implements FlyBehavior {
     public void fly() {
      System.out.println("I'm flying with a rocket");
     }
    }
    //鳴叫接口
    public interface QuackBehavior {
     public void quack();
    }

    //鳴叫狀態(tài)實現(xiàn)類(不能叫)
    public class MuteQuack implements QuackBehavior {
     public void quack() {
      System.out.println("<< Silence >>");
     }
    }

    //一個模型鴨的子類,在創(chuàng)建時指定特性
    public class DecoyDuck extends Duck {
    //在構造器中指定飛行特性和鳴叫特性(不能飛,不能叫)
     public DecoyDuck() {
      setFlyBehavior(new FlyNoWay());
      setQuackBehavior(new MuteQuack());
     }

     public void display() {
      System.out.println("I'm a duck Decoy");
     }
    }

    //測試程序

    public class MiniDuckSimulator {
     
     public static void main(String[] args) {
     
      DecoyDuck decoy = new DecoyDuck();

      decoy.performQuack();
       
      decoy .performFly(); 
    //運行時把飛行狀態(tài)改為火箭助推器飛行
      decoy .setFlyBehavior(new FlyRocketPowered());
      decoy .performFly();
     }
    }

    posted on 2008-03-17 09:55 Mark 閱讀(596) 評論(2)  編輯  收藏 所屬分類: 設計模式
    Comments
    • # re: 策略模式[未登錄]
      aa
      Posted @ 2008-12-03 14:51
      真的看不懂,抽象類有構選函數(shù),有沒有搞錯?  回復  更多評論   
    • # re: 策略模式
      sy
      Posted @ 2009-10-21 22:52
      @aa
      白癡,為什么不能有  回復  更多評論   
     
    主站蜘蛛池模板: 国产在线精品观看免费观看| 美女被免费视频网站a| 日韩电影免费在线观看中文字幕| 亚洲精品国产自在久久 | 亚洲色婷婷综合久久| 老湿机一区午夜精品免费福利| 大学生a级毛片免费观看| 亚洲av综合av一区二区三区| 日本免费人成视频播放| 国产成人精品日本亚洲语音 | 亚洲熟妇无码爱v在线观看| free哆啪啪免费永久| 亚洲福利电影在线观看| 在线a级毛片免费视频| 亚洲中文字幕无码mv| 亚洲?v无码国产在丝袜线观看| 成人免费夜片在线观看| 亚洲精品美女久久777777| 日本免费高清视频| 亚洲婷婷天堂在线综合| 日韩成人在线免费视频 | 亚洲精品动漫免费二区| 精品亚洲视频在线观看| 曰批全过程免费视频在线观看无码| 亚洲日本中文字幕区| 最近2019中文免费字幕| 免费又黄又爽又猛大片午夜| 亚洲精品夜夜夜妓女网| 无码国产精品一区二区免费式影视| 亚洲一卡2卡三卡4卡无卡下载| 四虎精品亚洲一区二区三区| a毛片全部免费播放| 亚洲国产成人手机在线电影bd| 日韩视频免费在线| 曰批全过程免费视频在线观看无码| 色偷偷女男人的天堂亚洲网| 亚洲国产精品成人久久蜜臀| 最近中文字幕无免费| 国产成人精品日本亚洲语音 | 免费中文字幕在线观看| 久草福利资源网站免费|