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)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 通江县| 富锦市| 华宁县| 通化县| 台安县| 克拉玛依市| 阳高县| 鱼台县| 嘉峪关市| 韶山市| 策勒县| 山东省| 建瓯市| 六枝特区| 兖州市| 明溪县| 福安市| 新余市| 桦川县| 东乌| 和平区| 游戏| 西乡县| 什邡市| 龙口市| 图片| 同仁县| 政和县| 商洛市| 依安县| 永德县| 临江市| 邹平县| 潮州市| 黄骅市| 菏泽市| 汝南县| 陆良县| 崇州市| 兴义市| 榆林市|