夢幻之旅

          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
          主站蜘蛛池模板: 邢台市| 安国市| 荔浦县| 绥滨县| 珠海市| 临桂县| 仲巴县| 临湘市| 忻城县| 南投县| 信丰县| 田林县| 东方市| 静宁县| 山西省| 洛川县| 泽库县| 米易县| 临夏市| 潼关县| 玉田县| 海南省| 邹城市| 鹿泉市| 台南县| 临清市| 甘谷县| 奉化市| 万盛区| 望奎县| 长沙市| 长宁区| 虞城县| 茂名市| 搜索| 宁安市| 衡南县| 唐河县| 民权县| 成武县| 青岛市|