设计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这个类,正所谓任何的变更都是需要本钱的。