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

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

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

    posts - 262,  comments - 221,  trackbacks - 0
    注:本文參考了《Java設計模式》一書和WWW.jdon.com網站的《Strategy模式》一章

    一、Strategy模式的意圖:


    策略操作定義了策略的輸入和輸出,而把策略的實現工作留給了各個類。這些類以不同的方案來實現同一操作,它們為用戶提供統一的接口,因而這些類可以相互替換。

    Strategy模式允許多種策略共存,而代碼不會混亂。策略模式也可以實現模式選擇邏輯和策略本身相分離。

    Strategy模式的意圖在于把可選的策略或方案封裝在不同的類中,并在這些類中實現一個共同的操作

    二、Strategy模式的例子:

    ·抽象父類:
    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;

    }

    ·繼承子類:
    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;
      }

    }

    三、Strategy模式的特點:

    ·有一個抽象的父類/接口,在其中定義了操作的模板(類似于Template模式)
    ·有一至多個實現類或子類,實現了父類/接口中的模板方法
    ·有一個可供客戶端動態切換算法的幫助類,該類擁有一個策略對象,可以在初始化時指定默認的策略,也可以在運行時通過set方法動態切換策略

    四、Strategy模式與其它模式的比較:

    ·Strage模式與State模式的比較

    在對狀態進行建模時,狀態的遷移是一個重要的方面(即如何切換到上、下一個狀態);而在對策略進行建模時,遷移與策略的選擇并不相關(即關注的是操作的策略,對象狀態的切換并不是關注的方面)。

    另外一個不同之處就是,Strategy模式可能允許客戶選擇或者提供一個策略,而State模式卻很少設計這樣的思路。

    ·Strategy模式與Template模式的比較

    Strategy模式的最大特點是可以在運行期間動態地切換算法。這一點和“Template”模式有點不同,后者雖然也提供抽象的模板框架,并且由子類繼承實現,Template模式一般在確定之后的運行期間就不會再次切換了。而前者可以或者說需要在運行期間動態地切換

    五、Strategy模式的適用場合:

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

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

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

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



    -------------------------------------------------------------
    生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
    posted on 2008-04-08 11:52 Paul Lin 閱讀(5373) 評論(2)  編輯  收藏 所屬分類: 模式與重構


    FeedBack:
    # re: 設計模式總結-Strategy模式
    2008-04-13 09:23 | applupus
    幫助類的代碼是不是有問題?
    return strategy.replace(site,oldString);

    策略中的方法是replace(),是不帶參數的。  回復  更多評論
      
    # re: 設計模式總結-Strategy模式[未登錄]
    2012-04-02 13:13 | vince
    這個例子做Strategy不太合適  回復  更多評論
      
    <2008年4月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    常用鏈接

    留言簿(21)

    隨筆分類

    隨筆檔案

    BlogJava熱點博客

    好友博客

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 无码精品一区二区三区免费视频| 国产成人+综合亚洲+天堂| 伊人久久大香线蕉免费视频| 国产一级淫片a视频免费观看| 亚洲熟女www一区二区三区| 欧美大尺寸SUV免费| 亚洲最大中文字幕无码网站| 日韩欧美一区二区三区免费观看 | 怡红院免费的全部视频| 亚洲线精品一区二区三区| 美女被免费网站91色| 亚洲人成网站在线观看播放| 免费无码黄网站在线看| 亚洲久本草在线中文字幕| 国产精品视频免费观看| 久久亚洲国产最新网站| 国产精品视_精品国产免费| 曰批免费视频播放在线看片二 | 又粗又硬又黄又爽的免费视频| 国产亚洲精品2021自在线| 国产亚洲精品成人a v小说| 你懂的网址免费国产| 亚洲精品视频在线观看免费 | 日韩电影免费观看| 亚洲白嫩在线观看| 精品久久久久久久免费人妻 | 一进一出60分钟免费视频| 亚洲成a人片在线观看无码| 国产91免费视频| 朝桐光亚洲专区在线中文字幕| 久久久久亚洲精品中文字幕| 无码免费一区二区三区免费播放 | 亚洲人成色777777老人头| 免费人成在线观看播放国产| 伊人久久大香线蕉免费视频| 2017亚洲男人天堂一| 亚洲国产综合久久天堂| 最近2018中文字幕免费视频| 羞羞视频网站免费入口| 亚洲精品私拍国产福利在线| 日韩a级毛片免费视频|