淺談策略模式(strategy)

程式界小強發表於2015-05-25

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/u010741376/article/details/45969195

策略模式定義了一系列演算法,並將每個演算法封裝起來,使他們可以相互替換,且演算法的變化不會影響到使用演算法的客戶。需要設計一個介面,為一系列實現類提供統一的方法,多個實現類實現該介面,設計一個抽象類(可有可無,屬於輔助類),提供輔助函式,關係圖如下:

 

—-例項實現

定義介面:

 

public interface ICalculator {
     public int calculate(String exp);
}

輔助類:

 

public class AbstractCalculator {
      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;
      }
}

三個實現類:

 

public class Plus extends AbstractCalculator implements ICalculator {

	@Override
	public int calculate(String exp) {
		int arrayint[]=split(exp, "\+");
		return arrayint[0]+arrayint[1];
	}

}

public class Minus extends AbstractCalculator implements ICalculator {

	@Override
	public int calculate(String exp) {
		int arrayint[]=split(exp, "-");
		return arrayint[0]-arrayint[1];
	}

}

public class Multiply extends AbstractCalculator implements ICalculator {

	@Override
	public int calculate(String exp) {
		int arrayint[]=split(exp, "\*");
		return arrayint[0]*arrayint[1];
	}

}

測試類:

 

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


相關文章