(筆記)設計模式 - 行爲型模式1:策略模式、模板方法模式

原貼:http://blog.csdn.net/zhangerqing/article/details/8243942java

## 策略模式(strategy)算法

策略模式定義了一系列算法,並將每一個算法封裝起來,使他們能夠相互替換,且算法的變化不會影響到使用算法的客戶。須要設計一個接口,爲一系列實現類提供統一的方法,多個實現類實現該接口,設計一個抽象類(無關緊要,屬於輔助類),提供輔助函數。ide

策略模式的決定權在用戶,系統自己提供不一樣算法的實現,新增或者刪除算法,對各類算法作封裝。所以,策略模式多用在算法決策系統中,外部用戶只須要決定用哪一個算法便可。函數

圖中ICalculator提供贊成的方法,
AbstractCalculator是輔助類,提供輔助方法,接下來,依次實現下每一個類:測試

首先統一接口:.net

[java] view plain copy設計

  1. public interface ICalculator {  
  2.     public int calculate(String exp);  
  3. }  

輔助類:blog

[java] view plain copy繼承

  1. public abstract class AbstractCalculator {  
  2.       
  3.     public int[] split(String exp,String opt){  
  4.         String array[] = exp.split(opt);  
  5.         int arrayInt[] = new int[2];  
  6.         arrayInt[0] = Integer.parseInt(array[0]);  
  7.         arrayInt[1] = Integer.parseInt(array[1]);  
  8.         return arrayInt;  
  9.     }  
  10. }  

三個實現類:接口

[java] view plain copy

  1. public class Plus extends AbstractCalculator implements ICalculator {  
  2.   
  3.     @Override  
  4.     public int calculate(String exp) {  
  5.         int arrayInt[] = split(exp,"\\+");  
  6.         return arrayInt[0]+arrayInt[1];  
  7.     }  
  8. }  

[java] view plain copy

  1. public class Minus extends AbstractCalculator implements ICalculator {  
  2.   
  3.     @Override  
  4.     public int calculate(String exp) {  
  5.         int arrayInt[] = split(exp,"-");  
  6.         return arrayInt[0]-arrayInt[1];  
  7.     }  
  8.   
  9. }  

[java] view plain copy

  1. public class Multiply extends AbstractCalculator implements ICalculator {  
  2.   
  3.     @Override  
  4.     public int calculate(String exp) {  
  5.         int arrayInt[] = split(exp,"\\*");  
  6.         return arrayInt[0]*arrayInt[1];  
  7.     }  
  8. }  

簡單的測試類:

[java] view plain copy

  1. public class StrategyTest {  
  2.   
  3.     public static void main(String[] args) {  
  4.         String exp = "2+8";  
  5.         ICalculator cal = new Plus();  
  6.         int result = cal.calculate(exp);  
  7.         System.out.println(result);  
  8.     }  
  9. }  

輸出:10

策略模式的決定權在用戶,系統自己提供不一樣算法的實現,新增或者刪除算法,對各類算法作封裝。所以,策略模式多用在算法決策系統中,外部用戶只須要決定用哪一個算法便可。

 

 

## 模板方法模式(Template Method)

解釋一下模板方法模式,就是指:一個抽象類中,有一個主方法,再定義1...n個方法,能夠是抽象的,也能夠是實際的方法,定義一個類,繼承該抽象類,重寫抽象方法,經過調用抽象類,實現對子類的調用

public abstract class AbstractCalculator {          /*主方法,實現對本類其它方法的調用*/     public final int calculate(String exp,String opt){         int array[] = split(exp,opt);         return calculate(array[0],array[1]);     }          /*被子類重寫的方法*/     abstract public int calculate(int num1,int num2);          public int[] split(String exp,String opt){         String array[] = exp.split(opt);         int arrayInt[] = new int[2];         arrayInt[0] = Integer.parseInt(array[0]);         arrayInt[1] = Integer.parseInt(array[1]);         return arrayInt;     } }

相關文章
相關標籤/搜索