一:介绍
策略模式定义了算法族,继承相同的接口,分别封装起来,让他们能够相互替换。以此来达到运行时更改算法。此模式让算法的变化独立于使用算法的客户。
二:设计原则
1.找出应用中可能变化之处,把他们独立出来,不要和那些不需要变化的代码混在一块。
2.针对接口编程,而不是针对实现编程。
3.多用组合,少用继承。
三:实战
场景:计算器的加减乘除
1.定义抽象方法用来表示计算
public interface Strategy {
public int doOperation(int num1, int num2);
}
2.定义策略角色
加法:
public class AdditionStrategy implements Strategy {
@Override
public int doOperation(int num1, int num2) {
return num1 + num2;
}
}
减法:
public class SubtrationStrategy implements Strategy {
@Override
public int doOperation(int num1, int num2) {
return num1 - num2;
}
}
省略乘法和除法。。。。。。。。。。。。。。。。。。
3.定义计算器
public class Calculator {
private Strategy strategy;
public Calculator(Strategy strategy) {
this.strategy = strategy;
}
public int operation(int num1, int num2) {
return strategy.doOperation(num1, num2);
}
}
4.测试:用户可根据实际需要选择计算器来实现自己算法
public class Application {
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
int num1 = 100;
int num2 = 10;
Calculator calculator = new Calculator(new AdditionStrategy());
System.out.println("people正在做加法" + calculator.operation(num1, num2));
Calculator calculator2 = new Calculator(new SubtrationStrategy());
System.out.println("people2正在做加法" + calculator2.operation(num1, num2));
}
}
四:总结
使用策略模式,能够在运行时选择算法。当然,缺点也很明显,如果实现类过多,会导致过于臃肿。。