策略模式是一种行为模式,将一系列算法独立封装,使用者可灵活替换,让算法独立于使用者。
策略模式包含三部分:
1.抽象策略,定义N个接口标识。
2.策略实现,具体策略算法。
3.策略调度,根据策略类引用,给予使用者调用
策略接口
public interface IStrategy {
int calc();
}
策略实现
扩展同类算法时,只需要新增策略实现即可。
public class StrategyImpl0 implements IStrategy{
// 业务参数
private int a;
private int b;
public StrategyImpl0(int a, int b) {
this.a = a;
this.b = b;
}
@Override
public int calc() {
int c = (this.a + this.b) * 2;
System.out.println("StrategyImpl0.calc => " + c);
return c;
}
}
public class StrategyImpl1 implements IStrategy {
// 业务参数
private int a;
private int b;
public StrategyImpl1(int a, int b) {
this.a = a;
this.b = b;
}
@Override
public int calc() {
int c = (this.a + this.b) * 3;
System.out.println("StrategyImpl1.calc => " + c);
return c;
}
}
策略调度
public enum StrategyContent {
// 使用枚举单例进行引用调度
INSTANCE;
public void call(IStrategy strategy){
strategy.calc();
}
}
使用
public class Main {
public static void main(String[] args) {
StrategyContent.INSTANCE.call(new StrategyImpl0(1,2));
StrategyContent.INSTANCE.call(new StrategyImpl1(1,2));
}
}
输出结果
StrategyImpl0.calc => 6
StrategyImpl1.calc => 9