設計模式之Strategy(策略)

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{

   //replaceFirstjdk1.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 test{

......

   public void testReplace(){

     // 使用第一套方案進行替換。
     RepTempRule rule=new RepTempRuleOne();
     rule.setOldString(record);
     rule.replace();

   }

.....

}

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

StrategyFactory 有一定的類似 ,Strategy 相對簡單容易理解。

Strategy 適合下列場合 :

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

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

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

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

 

首先 , 我們建立一個抽象類別 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{

   //replaceFirstjdk1.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 test{

......

   public void testReplace(){

     // 使用第一套方案進行替換。
     RepTempRule rule=new RepTempRuleOne();
     rule.setOldString(record);
     rule.replace();

   }

.....

}

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

StrategyFactory 有一定的類似 ,Strategy 相對簡單容易理解。

Strategy 適合下列場合 :

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值