<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設(shè)計(jì)模式》一書(shū)和WWW.jdon.com網(wǎng)站的《Strategy模式》一章

    一、Strategy模式的意圖:


    策略操作定義了策略的輸入和輸出,而把策略的實(shí)現(xiàn)工作留給了各個(gè)類(lèi)。這些類(lèi)以不同的方案來(lái)實(shí)現(xiàn)同一操作,它們?yōu)橛脩籼峁┙y(tǒng)一的接口,因而這些類(lèi)可以相互替換。

    Strategy模式允許多種策略共存,而代碼不會(huì)混亂。策略模式也可以實(shí)現(xiàn)模式選擇邏輯和策略本身相分離。

    Strategy模式的意圖在于把可選的策略或方案封裝在不同的類(lèi)中,并在這些類(lèi)中實(shí)現(xiàn)一個(gè)共同的操作

    二、Strategy模式的例子:

    ·抽象父類(lèi):
    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;

    }

    ·繼承子類(lèi):
    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");   
        }

    }

    ·幫助類(lèi):
    public class RepTempRuleSolve 
          
    // 當(dāng)前的策略
      private RepTempRule strategy;

          
    // 初始化時(shí)指定默認(rèn)的策略
       public RepTempRuleSolve(RepTempRule rule){
        
    this.strategy=rule;
      }


          
    // 根據(jù)當(dāng)前策略處理用戶的請(qǐng)求
     public String getNewContext(Site site,String oldString) {
        
    return strategy.replace(site,oldString);
      }


          
    // 動(dòng)態(tài)切換策略
       public void changeAlgorithm(RepTempRule newAlgorithm) {
        strategy 
    = newAlgorithm;
      }

    }

    三、Strategy模式的特點(diǎn):

    ·有一個(gè)抽象的父類(lèi)/接口,在其中定義了操作的模板(類(lèi)似于Template模式)
    ·有一至多個(gè)實(shí)現(xiàn)類(lèi)或子類(lèi),實(shí)現(xiàn)了父類(lèi)/接口中的模板方法
    ·有一個(gè)可供客戶端動(dòng)態(tài)切換算法的幫助類(lèi),該類(lèi)擁有一個(gè)策略對(duì)象,可以在初始化時(shí)指定默認(rèn)的策略,也可以在運(yùn)行時(shí)通過(guò)set方法動(dòng)態(tài)切換策略

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

    ·Strage模式與State模式的比較

    在對(duì)狀態(tài)進(jìn)行建模時(shí),狀態(tài)的遷移是一個(gè)重要的方面(即如何切換到上、下一個(gè)狀態(tài));而在對(duì)策略進(jìn)行建模時(shí),遷移與策略的選擇并不相關(guān)(即關(guān)注的是操作的策略,對(duì)象狀態(tài)的切換并不是關(guān)注的方面)。

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

    ·Strategy模式與Template模式的比較

    Strategy模式的最大特點(diǎn)是可以在運(yùn)行期間動(dòng)態(tài)地切換算法。這一點(diǎn)和“Template”模式有點(diǎn)不同,后者雖然也提供抽象的模板框架,并且由子類(lèi)繼承實(shí)現(xiàn),Template模式一般在確定之后的運(yùn)行期間就不會(huì)再次切換了。而前者可以或者說(shuō)需要在運(yùn)行期間動(dòng)態(tài)地切換

    五、Strategy模式的適用場(chǎng)合:

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

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

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

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



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


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

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

    常用鏈接

    留言簿(21)

    隨筆分類(lèi)

    隨筆檔案

    BlogJava熱點(diǎn)博客

    好友博客

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 精品国产免费观看久久久| a级片免费在线播放| 无套内射无矿码免费看黄| eeuss影院ss奇兵免费com| 中文字幕不卡免费高清视频| 无码人妻一区二区三区免费视频| 国产精品免费一区二区三区| 国产好大好硬好爽免费不卡| 精品福利一区二区三区免费视频 | 黄色短视频免费看| 日韩精品无码免费专区午夜| 无码av免费网站| 0588影视手机免费看片| 韩国日本好看电影免费看| 亚洲一区视频在线播放| 亚洲免费视频在线观看| 伊人久久五月丁香综合中文亚洲| 国产成人亚洲精品播放器下载| www免费插插视频| 中文字幕免费观看| 美女被免费视频网站a国产 | 国产成人免费永久播放视频平台 | 女人被男人躁的女爽免费视频| 国产免费看插插插视频| 人人狠狠综合久久亚洲88| 中文字幕 亚洲 有码 在线| 免费的黄色的网站| 一级毛片不卡片免费观看| 成人免费777777| 亚洲天堂免费在线视频| 亚洲成aⅴ人片在线观| 黄色大片免费网站| 7x7x7x免费在线观看| 免费看男女下面日出水视频| 久久久久亚洲AV无码专区体验| 亚洲欧洲日本在线观看| 国产一区二区三区免费观在线| 影音先锋在线免费观看| 亚洲国产精品无码久久一区二区| 亚洲首页国产精品丝袜| 成年女人A毛片免费视频|