設計1個計算器,有+、-、*、/。
策略模式的主要思想在于,將所有的可供選擇的算法封裝,通過1個統1的容器傳入予以調用。比如:
我有1個計算用的接口,往里面插入計算器,計算器中有加法器、減法器等等,這些就是策略,我把策略包裝好,放入計算器進行調用,計算器再插入接口便可。
因此基于該模式的代碼應以下:
計算接口:
interface Operation{
public int calculate(int a, int b);
}
策略應當實現Strategy
接口使得所有策略保持類型1致,并具有統1的調用方法:
class AddStrategy implements Strategy{
@Override
public int operate(int a, int b) {
return a+b;
}
}
class MinusStrategy implements Strategy{
@Override
public int operate(int a, int b) {
return a-b;
}
}
計算器應當實現Operation
接口,用來履行calculate
:
class Calculator implements Operation{
private Strategy strategy = null;
public void setStrategy(String tag){
if(tag.equals("+")){
strategy = new AddStrategy();
}
if(tag.equals("-")){
strategy = new MinusStrategy();
}
}
@Override
public int calculate(int a, int b) {
return strategy.operate(a,b);
}
}
最后,調用計算器可以下編寫:
public static void main(String[] args){
Calculator calculator = new Calculator();
calculator.setStrategy("+");
calculator.calculate(1,2);
}
策略模式就是用來封裝算法的,實踐中可以用它來封裝幾近任何類型的規則,只要在分析進程入耳到需要在不同時間利用不同的業務規則,就能夠斟酌使用策略模式處理這類變化的可能性。
在基本的策略模式中,選擇所用具體實現的職責由客戶端對象承當,并傳給策略模式的Calculate
對象。
但是,對策略的增加和修改,還是需要修改Calculate這個類,正所謂任何的變更都是需要本錢的。