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

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

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

    posts - 73,  comments - 55,  trackbacks - 0

    Strategy策略模式是屬于設計模式中 對象行為型模式,主要是定義一系列的算法,把這些算法一個個封裝成單獨的類.

    Stratrgy應用比較廣泛,比如, 公司經營業務變化圖, 可能有兩種實現方式,一個是線條曲線,一個是框圖(bar),這是兩種算法,可以使用Strategy實現.

    這里以字符串替代為例, 有一個文件,我們需要讀取后,希望替代其中相應的變量,然后輸出.關于替代其中變量的方法可能有多種方法,這取決于用戶的要求,所以我們要準備幾套變量字符替代方案.

    ?

    首先,我們建立一個抽象類RepTempRule 定義一些公用變量和方法:

    public abstract class RepTempRule{

    protected String oldString="";
    public void setOldString(String oldString){
      this.oldString=oldString;
    }

    protected String newString="";
    public String getNewString(){
      return newString;
    }



    public abstract void replace() throws Exception;


    }

    在RepTempRule中 有一個抽象方法abstract需要繼承明確,這個replace里其實是替代的具體方法.
    我們現在有兩個字符替代方案,
    1.將文本中aaa替代成bbb;
    2.將文本中aaa替代成ccc;

    對應的類分別是RepTempRuleOne RepTempRuleTwo

    public class RepTempRuleOne extends RepTempRule{


    public void replace() throws Exception{

      //replaceFirst是jdk1.4新特性
      newString=oldString.replaceFirst("aaa", "bbbb")
      System.out.println("this is replace one");
      
    }


    }

    public class RepTempRuleTwo extends RepTempRule{


    public void replace() throws Exception{

      newString=oldString.replaceFirst("aaa", "ccc")
      System.out.println("this is replace Two");
      
    }


    }

    第二步:我們要建立一個算法解決類,用來提供客戶端可以自由選擇算法。

    public class RepTempRuleSolve {

      private RepTempRule strategy;

      public RepTempRuleSolve(RepTempRule rule){
        this.strategy=rule;
      }

      public String getNewContext(Site site,String oldString) {
        return strategy.replace(site,oldString);
      }

      public void changeAlgorithm(RepTempRule newAlgorithm) {
        strategy = newAlgorithm;
      }

    }

    ?

    ?

    調用如下:

    public class test{

    ......

      public void testReplace(){

      //使用第一套替代方案
      RepTempRuleSolve solver=new RepTempRuleSolve(new RepTempRuleSimple());
      solver.getNewContext(site,context);

      //使用第二套

      solver=new RepTempRuleSolve(new RepTempRuleTwo());
      solver.getNewContext(site,context);

      }

    .....

    }

    我們達到了在運行期間,可以自由切換算法的目的。

    實際整個Strategy的核心部分就是抽象類的使用,使用Strategy模式可以在用戶需要變化時,修改量很少,而且快速.

    Strategy和Factory有一定的類似,Strategy相對簡單容易理解,并且可以在運行時刻自由切換。Factory重點是用來創建對象。

    Strategy適合下列場合:

    1.以不同的格式保存文件;

    2.以不同的算法壓縮文件;

    3.以不同的算法截獲圖象;

    4.以不同的格式輸出同樣數據的圖形,比如曲線 或框圖bar等

    posted on 2006-07-19 14:00 保爾任 閱讀(280) 評論(0)  編輯  收藏 所屬分類: Design Patten

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费A级毛片无码免费视| 久久精品国产亚洲αv忘忧草| 成年女人免费v片| 午夜老司机永久免费看片| 男男黄GAY片免费网站WWW| 亚洲综合成人婷婷五月网址| 亚洲伊人久久大香线蕉苏妲己| 中文字幕亚洲日韩无线码| 国产成人免费手机在线观看视频 | 成年人在线免费看视频| 50岁老女人的毛片免费观看| 任你躁在线精品免费| 2022免费国产精品福利在线| 亚洲熟女综合一区二区三区| 亚洲无人区码一二三码区别图片| 在线观看免费人成视频色9| 97在线视频免费公开观看| 久久精品国产精品亚洲艾| 免费看国产成年无码AV片| 女性无套免费网站在线看| 亚洲免费人成视频观看| 国产免费久久精品99re丫y| 国产片免费在线观看| 五月婷婷亚洲综合| 久久久久亚洲av成人无码电影| 亚洲精品中文字幕乱码三区| 久久精品国产亚洲av麻豆小说 | 午夜免费福利网站| 四虎影库久免费视频| 亚洲午夜久久久久久久久电影网 | 免费a级黄色毛片| 在线亚洲人成电影网站色www| 久久青草亚洲AV无码麻豆| 亚洲乱人伦精品图片| 国产综合激情在线亚洲第一页| 亚洲一级片免费看| 亚洲成人免费网站| 免费乱码中文字幕网站| 久久亚洲精品AB无码播放| 中文字幕精品三区无码亚洲| 一级黄色毛片免费看|