熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

Java設計模式之Strategy模式

2013-11-23 19:40:24  來源: Java高級技術 

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

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

  這裡以字符串替代為例 有一個文件我們需要讀取後希望替代其中相應的變量然後輸出

  關於替代其中變量的方法可能有多種方法這取決於用戶的要求所以我們要准備幾套變量字符替代方案

   

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

  public abstract class RepTempRule{

  protected String oldString=;

  public void setOldString(String oldString){

  thisoldString=oldString;

  }

  protected String newString=;

  public String getNewString(){

  return newString;

  }

  public abstract void replace() throws Exception;

  }

  在RepTempRule 中 有一個抽象方法abstract 需要繼承明確這個replace 裡其實是替代的具體方法

  我們現在有兩個字符替代方案

  將文本中aaa 替代成bbb;

  將文本中aaa 替代成ccc;

  對應的類分別是RepTempRuleOne RepTempRuleTwo

  public class RepTempRuleOne extends RepTempRule{

  public void replace() throws Exception{

  //replaceFirst 是jdk 新特性

  newString=oldStringreplaceFirst(aaa bbbb)

  Systemoutprintln(this is replace one);

  }

  }

  public class RepTempRuleTwo extends RepTempRule{

  public void replace() throws Exception{

  newString=oldStringreplaceFirst(aaa ccc)

  Systemoutprintln(this is replace Two);

  }

  }

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

  public class RepTempRuleSolve {

  private RepTempRule strategy;

  public RepTempRuleSolve(RepTempRule rule){

  thisstrategy=rule;

  }

  public String getNewContext(Site siteString oldString) {

  return strategyreplace(siteoldString);

  }

  public void changeAlgorithm(RepTempRule newAlgorithm) {

  strategy = newAlgorithm;

  }

  }

  調用如下:

  public class test{

  

  public void testReplace(){

  //使用第一套替代方案

  RepTempRuleSolve solver=new RepTempRuleSolve(new RepTempRuleSimple());

  solvergetNewContext(sitecontext);

  //使用第二套

  solver=new RepTempRuleSolve(new RepTempRuleTwo());

  solvergetNewContext(sitecontext);

  }

  

  }

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

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

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

  Strategy 適合下列場合:

  以不同的格式保存文件;

  以不同的算法壓縮文件;

  以不同的算法截獲圖象;

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


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27274.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.