Strategy 是屬於設計模式中 物件行爲型模式 , 主要是定義一系列的演算法 , 把這些演算法一個個封裝成單獨的類別。
Stratrgy 應用比較廣泛 , 比如 , 公司經營業務變化圖 , 可能有兩種實現方式 , 一個是線條曲線 , 一個是框圖 (bar), 這是兩種演算法 , 可以使用 Strategy 實現。
這裏以字串替代爲例 , 有一個文件 , 我們需要讀取後 , 希望替代其中相應的變數 , 然後輸出。關於替代其中變數的方法可能有多種方法 , 這取決於用戶的要求 , 所以我們要準備幾套變數字元替代方案。
首先 , 我們建立一個抽象類別 RepTempRule 定義一些公用變數和方法 :
public abstract class RepTempRule{ |
在 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 class test{ ...... public void testReplace(){ // 使用第一套方案進行替換。 } ..... } |
實際整個 Strategy 的核心部分就是抽象類別的使用 , 使用 Strategy 模式可以在用戶需要變化時 , 修改量很少 , 而且快速。
Strategy 和 Factory 有一定的類似 ,Strategy 相對簡單容易理解。
Strategy 適合下列場合 :
1. 以不同的格式保存文件 ;
2. 以不同的演算法壓縮文件 ;
3. 以不同的演算法截獲圖像 ;
4. 以不同的格式輸出同樣資料的圖形 , 比如曲線 或框圖 bar 等
首先 , 我們建立一個抽象類別 RepTempRule 定義一些公用變數和方法 :
public abstract class RepTempRule{ |
在 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 class test{ ...... public void testReplace(){ // 使用第一套方案進行替換。 } ..... } |
實際整個 Strategy 的核心部分就是抽象類別的使用 , 使用 Strategy 模式可以在用戶需要變化時 , 修改量很少 , 而且快速。
Strategy 和 Factory 有一定的類似 ,Strategy 相對簡單容易理解。
Strategy 適合下列場合 :
1. 以不同的格式保存文件 ;
2. 以不同的演算法壓縮文件 ;
3. 以不同的演算法截獲圖像 ;
4. 以不同的格式輸出同樣資料的圖形 , 比如曲線 或框圖 bar 等