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

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

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

    posts - 120,  comments - 19,  trackbacks - 0

    Strategy策略模式是屬于設(shè)計(jì)模式中 對(duì)象行為型模式,主要是定義一系列的算法,把這些算法一個(gè)個(gè)封裝成單獨(dú)的類.

    Stratrgy應(yīng)用比較廣泛,比如, 公司經(jīng)營(yíng)業(yè)務(wù)變化圖, 可能有兩種實(shí)現(xiàn)方式,一個(gè)是線條曲線,一個(gè)是框圖(bar),這是兩種算法,可以使用Strategy實(shí)現(xiàn).

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

    ?

    首先,我們建立一個(gè)抽象類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中 有一個(gè)抽象方法abstract需要繼承明確,這個(gè)replace里其實(shí)是替代的具體方法.
    我們現(xiàn)在有兩個(gè)字符替代方案,
    1.將文本中aaa替代成bbb;
    2.將文本中aaa替代成ccc;

    對(duì)應(yīng)的類分別是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");
      
    }


    }

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

    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;
      }

    }

    ?

    ?

    調(diào)用如下:

    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);

      }

    .....

    }

    我們達(dá)到了在運(yùn)行期間,可以自由切換算法的目的。

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

    Strategy和Factory有一定的類似,Strategy相對(duì)簡(jiǎn)單容易理解,并且可以在運(yùn)行時(shí)刻自由切換。Factory重點(diǎn)是用來(lái)創(chuàng)建對(duì)象。

    Strategy適合下列場(chǎng)合:

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

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

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

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



    posted on 2006-08-18 09:09 阿成 閱讀(284) 評(píng)論(0)  編輯  收藏 所屬分類: 設(shè)計(jì)模式

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 四虎国产精品成人免费久久 | 亚洲人成网站日本片| 18禁成年无码免费网站无遮挡 | 好男人资源在线WWW免费| 久久精品国产亚洲AV嫖农村妇女| 无码日韩精品一区二区免费| 免费无码午夜福利片| 久久亚洲日韩看片无码| 国产免费卡一卡三卡乱码| 色www永久免费网站| 亚洲日韩一中文字暮| 在线亚洲精品自拍| 国产一卡2卡3卡4卡2021免费观看| 亚洲GV天堂无码男同在线观看| 中文字幕久久亚洲一区| 日韩视频在线精品视频免费观看 | 亚洲六月丁香六月婷婷蜜芽| 亚洲精品tv久久久久| 久久久久高潮毛片免费全部播放| 老司机亚洲精品影院在线观看 | 国产特黄特色的大片观看免费视频| 亚洲中字慕日产2020| 久久久久国产亚洲AV麻豆| 五月婷婷综合免费| caoporm碰最新免费公开视频| 亚洲伦理中文字幕| 日本亚洲视频在线| 免费人妻av无码专区| 黄色片在线免费观看| 人妻无码一区二区三区免费| 日韩精品无码免费视频| 99亚偷拍自图区亚洲| 99久久亚洲精品无码毛片| 亚洲情侣偷拍精品| 免费看美女被靠到爽| av无码久久久久不卡免费网站| 成人性做爰aaa片免费看| 一级看片免费视频| 亚洲av无码成人影院一区| 亚洲国产日韩精品| 亚洲精品在线免费看|