Strategy(策略)

          中心思想:
          ????? 把變化的部分和不變的部分隔離開來。用接口來“抽取”
          出來。

          實(shí)現(xiàn):

          實(shí)際整個(gè)Strategy的核心部分就是抽象類的使用,【可以用接口,】(用抽象類聲明對(duì)象變量引用不同的子類對(duì)象)使用Strategy模式可以在用戶需要變化時(shí),修改量很少,而且快速.

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

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

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

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

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



          具體操作步驟:
          ???

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


          1,我們建立一個(gè)抽象類RepTempRule定義一些公用變量和方法:

          ?1 public ? abstract ? class ?RepTempRule {
          ?2
          ?3 protected ?String?oldString = "" ;
          ?4 public ? void ?setOldString(String?oldString) {
          ?5    this .oldString = oldString;?
          ?6 }

          ?7
          ?8 protected ?String?newString = "" ;
          ?9 public ?String?getNewString() {
          10    return ?newString;
          11 }

          12 // 以上是公共變量和方法
          13 public ? abstract ? void ?replace()? throws ?Exception;
          14
          15 }

          RepTempRule中有一個(gè)抽象方法abstract需要繼承明確,這個(gè)replace()里其實(shí)是替代的具體方法.

          2,兩種方案的實(shí)現(xiàn)類,實(shí)現(xiàn)抽象方法replace()?
          public class RepTempRuleTwo extends RepTempRule
          public class RepTempRuleOne extends RepTempRule


          3,我們要建立一個(gè)算法解決類,用來提供客戶端可以自由選擇算法。

          ?

          ?1 public ? class ?RepTempRuleSolve? {?
          ?2
          ?3 private ?RepTempRule?strategy;? // 抽象類不可以生成對(duì)象,但是可以生成對(duì)象變量,去引用已經(jīng)實(shí)現(xiàn)抽象方法的子類
          ?4
          ?5    public ?RepTempRuleSolve(RepTempRule?rule) {
          ?6      this .strategy = rule;
          ?7   }

          ?8
          ?9
          10
          11    public ?String?getNewContext(Site?site,String?oldString)? {
          12      return ?strategy.replace(site,oldString);
          13   }

          14
          15    public ? void ?changeAlgorithm(RepTempRule?newAlgorithm)? {?? // 通過該方法動(dòng)態(tài)改變strategy
          16     strategy? = ?newAlgorithm;
          17
          18 }

          19

          ?


          4,程序中使用。可以方便的切換實(shí)現(xiàn)方案。

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

            //使用第二套

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




          ?

          posted on 2009-04-11 01:35 luofeng225 閱讀(202) 評(píng)論(0)  編輯  收藏 所屬分類: 設(shè)計(jì)模式

          <2009年4月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          我曾經(jīng)聽到這么一個(gè)故事: 一個(gè)年輕的程序員問一個(gè)老程序員(一個(gè)比較牛逼的公司的CTO) 年輕程序員: 你為什么這么牛X., 就好像沒有你不會(huì)的。老程序員: 積累的。年輕程序員: 怎么才能積累到您的程度呢。我每天都在積累。但是似乎都沒有感覺到進(jìn)步。老程序員: 我從20歲開始做到了一件事情,直到今天,而且盡可能地保證不間斷。年輕程序員: 到底是什么? 老程序員: 我每天保證自己有2個(gè)小時(shí)在學(xué)習(xí)新的東西。

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          相冊(cè)

          收藏夾

          Java Website

          java技術(shù)博客

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 博爱县| 中牟县| 平安县| 涿州市| 新龙县| 汝州市| 榆林市| 工布江达县| 乐山市| 尉犁县| 灵丘县| 喀喇| 博野县| 昭苏县| 松潘县| 黄石市| 临江市| 格尔木市| 本溪市| 科技| 河池市| 阿拉善左旗| 金山区| 山丹县| 南陵县| 息烽县| 和林格尔县| 怀安县| 龙口市| 楚雄市| 修武县| 墨竹工卡县| 丽水市| 廉江市| 石阡县| 思南县| 深水埗区| 赣州市| 郧西县| 南昌市| 吴江市|