firtre

          小螞蟻,定語沒想好。 精靈古怪,不是我。

          Head First 設計模式之策略模式

          設計原則:找出應用可能需要變化之處,把它們獨立出來,不要和那個不需要變化的代碼放在一起.
          設計原則:多用組合,少用繼承.
          設計原則:針對接口編程,而不是針對實現編程.
          背景:需要設計一個鴨子類,有飛行和呱呱叫兩種行為.可是后來引入了橡皮鴨,導致傳統的繼承處理無法使用(不能讓橡皮鴨也會飛)而且還可能會有既不會飛也不會叫的鴨子,或者需要引入不同種鴨子的具體的飛行運行,叫的聲音......
          策略模式:把易變的動作部分抽象出來成為單獨的類(接口).
          定義:定義了算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化獨立于使用算法的客戶.

          public abstract class Duck {
           FlyBehavior flyBehavior;
           QuackBehavior quackBehavior;
           public Duck(){
           }
           
           public 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();
          }

          public class FlyNoWay implements FlyBehavior{

           public void fly() {
            System.out.println("I can't fly");
           }
          }

          public class FlyWithWings implements FlyBehavior{

           public void fly() {
            System.out.println("I'm flying!!");
           }
          }

          public interface QuackBehavior {
           public void quack();
          }

          public class Quack  implements QuackBehavior{

           public void quack() {
            System.out.println("Quack");
           }
          }

          public class muteQuack implements QuackBehavior{

           public void quack() {
            System.out.println("<<Silence>>");
           }

          }

          public class Squeak implements QuackBehavior{

           public void quack() {
            System.out.println("Squeak");
           }
          }

          public class MallardDuck extends Duck{
           public MallardDuck(){
            quackBehavior = new Quack();
            flyBehavior = new FlyWithWings();
           }
           public void display() {
            System.out.println("I'm a real Mallard duck.");
           }
          }
          測試類:
          public class MiniDuckSimulator {
           public static void main(String[] args){
            Duck mallard = new MallardDuck();
            mallard.performQuack();
            mallard.performFly();
           }
          }

          posted on 2008-04-07 23:03 笨蛋 閱讀(191) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 云林县| 易门县| 宁南县| 肥乡县| 香格里拉县| 竹北市| 八宿县| 上高县| 阿拉尔市| 东莞市| 彩票| 健康| 扬中市| 苏尼特右旗| 沅江市| 卢氏县| 巫溪县| 原阳县| 桦川县| 苏尼特右旗| 通河县| 固阳县| 特克斯县| 曲松县| 张家港市| 文成县| 郯城县| 兰坪| 渑池县| 巴马| 上虞市| 泸溪县| 鹤岗市| 龙南县| 丁青县| 大竹县| 温泉县| 云龙县| 黔南| 嘉峪关市| 清苑县|