In computer programming, the strategy pattern (also known as the policy pattern) is a behavioral software design pattern that enables selecting an algorithm at runtime. Instead of implementing a single algorithm directly, code receives run-time instructions as to which in a family of algorithms to use.
——Quote from wikipediajava
在计算机编程中,策略模式(也称为策略模式)是一种行为软件设计模式,它支持在运行时选择算法。代码接收运行时指令,而不是直接实现单个算法,这些指令在一系列算法中使用。算法
[站外图片上传中...(image-c98784-1573659608688)]编程
优势: 一、算法能够自由切换。 二、避免使用多重条件判断。 三、扩展性良好。设计模式
缺点: 一、策略类会增多。 二、全部策略类都须要对外暴露。ide
使用场景: 一、若是在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式能够动态地让一个对象在许多行为中选择一种行为。 二、一个系统须要动态地在几种算法中选择一种。 三、若是一个对象有不少的行为,若是不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。this
注意事项:若是一个系统的策略多于四个,就须要考虑使用混合模式,解决策略类膨胀的问题。设计
这里咱们经过计算加减乘除来实例策略模式的运用,以算法为基类,其子类实现相关的运算逻辑,咱们经过选择相应的子类来决定使用什么样的算法。code
interface Strategy { int doOperation(int num1, int num2); } class OperationAdd implements Strategy { @Override public int doOperation(int num1, int num2) { System.out.println("add: " + num1 + "+" + num2); return num1 + num2; } } class OperationSubtract implements Strategy { @Override public int doOperation(int num1, int num2) { System.out.println("substract: " + num1 + "-" + num2); return num1 - num2; } } class OperationMultiply implements Strategy { @Override public int doOperation(int num1, int num2) { System.out.println("multiply: " + num1 + "*" + num2); return num1 * num2; } } class OperationDivide implements Strategy { @Override public int doOperation(int num1, int num2) { System.out.println("divide: " + num1 + "/" + num2); return num1 / num2; } } class Context { private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public int executeStrategy(int num1, int num2) { return strategy.doOperation(num1, num2); } } public class Demo { public static void main(String[] args) { Context context1 = new Context(new OperationAdd()); int result1 = context1.executeStrategy(9, 3); System.out.println("strategy result: "+result1+"\n"); Context context2 = new Context(new OperationMultiply()); int result2 = context2.executeStrategy(9, 3); System.out.println("strategy result: "+result2+"\n"); Context context3 = new Context(new OperationSubtract()); int result3 = context3.executeStrategy(9, 3); System.out.println("strategy result: "+result3+"\n"); } }
add: 9+3 strategy result: 12 multiply: 9*3 strategy result: 27 substract: 9-3 strategy result: 6