夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks
          策略模式
               它屬于對象行為型模式,主要針對一組算法,將每一個算法封裝到具有共同接口的獨立的類中,從而使得它們可以相互替換。策略模式使得算法可以在不影響到客戶端的情況下發生變化。通常,策略模式適用于當一個應用程序需要實現一種特定的服務或者功能,而且該程序有多種實現方式時使用。
          它由以下幾個部份組成:
              1.環境對象:該類中實現了對抽象策略中定義的接口或者抽象類的引用。
              2.抽象策略對象:它可由接口或抽象類來實現。
              3.具體策略對象:它封裝了實現同不功能的不同算法。
          各個組成部份之間的關系為:
             
          舉例:
          策略接口類:
          package strategy;

          /**
           * <ul>
           * <li>Title:[IStrategy]</li>
           * <li>Description: [策略接口]</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2011-7-28]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * 
          @version 1.0  
           
          */

          public interface IStrategy
          {   
              
          public void oparator();
          }


          具體策略類A:
          package strategy;

          public class StrategyA implements IStrategy
          {

              
          public void oparator()
              
          {
                  System.out.println(
          "十而圍之");
              }
             
          }


          具體策略類B:
          package strategy;

          public class StrategyB implements IStrategy
          {

              
          public void oparator()
              
          {
                  System.out.println(
          "五而攻之");
              }
             

          }


          具體策略類C
          package strategy;

          public class StrategyC implements IStrategy
          {
              
          public void oparator()
              
          {
                  System.out.println(
          "敵而分之");
              }
             

          }



          上下文環境類:
          package strategy;

          /**
           * <ul>
           * <li>Title:[Context]</li>
           * <li>Description: [上下文環境]</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2011-7-28]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * 
          @version 1.0  
           
          */

          public class Context
          {   
              
          /** 策略 */
              
          private IStrategy strategy;
              
              
          public Context(IStrategy strategy)
              
          {
                  
          this.strategy = strategy;
              }

              
              
          /**
               * <ul>
               * <li>Description:[作戰]</li>
               * <li>Created by [Huyvanpull] [2011-7-28]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               
          */

              
          public void fight()
              
          {
                  
          this.strategy.oparator();
              }

          }


          測試類:
          package strategy;

          public class Test
          {   
              
          public static void main(String[] args)
              
          {
                  
          // 我于敵人力量十倍
                  Context context = new Context(new StrategyA());
                  context.fight();
                  
                  
          // 我于敵人力量五倍
                  context = new Context(new StrategyB());
                  context.fight();
                  
                  
          // 我于敵人力量一倍
                  context = new Context(new StrategyC());
                  context.fight();
              }

          }


          策略模式的優點:
              1.提供了一種代替繼承的方法,而且既保持了繼承的優點,又保持了繼承的靈活性.
              2.封裝了算法,使系統更加靈活.

          策略模式的缺點:
              每一個策略增加了一個類,使系統的類會過多.
          posted on 2011-07-28 01:31 HUIKK 閱讀(270) 評論(0)  編輯  收藏 所屬分類: Design Patterns
          主站蜘蛛池模板: 湘阴县| 崇文区| 砀山县| 剑川县| 邯郸市| 中牟县| 无为县| 贵阳市| 前郭尔| 邹平县| 成都市| 四川省| 眉山市| 长宁县| 海口市| 荥经县| 康乐县| 广安市| 高安市| 博客| 古蔺县| 武鸣县| 祁门县| 山阳县| 诏安县| 广灵县| 黄梅县| 宜兰县| 垦利县| 昌吉市| 贵溪市| 米脂县| 屯留县| 浦江县| 当雄县| 安顺市| 新营市| 贵南县| 边坝县| 南投市| 易门县|