行為模式之Strategy(策略)

來源:互聯網
上載者:User

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

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

這裡以字串替代為例,
有一個檔案,我們需要讀取後,希望替代其中相應的變數,然後輸出.關於替代其中變數的方法可能有多種方法,這取決於使用者的要求,所以我們要準備幾套變數字
符替代方案.

 

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

對應的類分別是
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");


  

}

}

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

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

}

 

 

調用如下:

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

  }

.....

}

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

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

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

Strategy適合下列場合:

1.以不同的格式儲存檔案;

2.以不同的演算法壓縮檔;

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

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.