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 等
1846

被折叠的 条评论
为什么被折叠?



