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