策略模式
一、简介
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。
这种就相当于传一段代码到系统中,类似Lambda传一段代码进去运行。
可以从外部传递要执行的策略,或者在配置文件中配置对应的策略。
二、类图

三、代码实现
3.1 接口
public interface Strategy {
int calculate(int num1,int num2);
}
3.2 策略
public class AddStrategy implements Strategy{
@Override
public int calculate(int num1, int num2) {
return num1+num2;
}
}
public class SubtractsStrategy implements Strategy {
@Override
public int calculate(int num1, int num2) {
return num1-num2;
}
}
public class MultiplyStrategy implements Strategy{
@Override
public int calculate(int num1, int num2) {
return num1*num2;
}
}
3.3 context类
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public int excuteStrategy(int num1, int num2){
return strategy.calculate(num1, num2);
}
}
3.4 测试类
public class StrategyPatternDemo {
public static void main(String[] args) {
Context addContext = new Context(new AddStrategy());
int addRes = addContext.excuteStrategy(11, 22);
System.out.println("addRes = " + addRes);
Context subContext = new Context(new SubtractsStrategy());
int subRes = subContext.excuteStrategy(20, 9);
System.out.println("subRes = " + subRes);
Context mulContext = new Context(new MultiplyStrategy());
int mulRes = mulContext.excuteStrategy(20, 9);
System.out.println("mulRes = " + mulRes);
//lambda表达式传段策略
Context divContext = new Context((int num1, int num2)-> num1/num2);
int divRes = divContext.excuteStrategy(20,9);
System.out.println("divRes = " + divRes);
}
}

浙公网安备 33010602011771号