策略模式(Strategy Pattern)
策略模式,我觉得是状态模式的一种升级或衍生版本,策略模式更倾向于运算或策略,而状态模式更倾向于状态。
策略模式的实例
首先定义几种不同的策略
class OperationAdd {
doOperation(num1, num2) {
return num1 + num2;
}
}
class OperationSubstract {
doOperation(num1, num2) {
return num1 - num2;
}
}
class OperationMultiply {
doOperation(num1, num2) {
return num1 * num2;
}
}
最后定义根据策略来变更行为的上下文
class Context {
constructor(strategy){
this.strategy = strategy;
}
executeStrategy(num1, num2){
return this.strategy.doOperation(num1, num2);
}
}
那么根据策略的不同改变了上下文执行的行为
let context = new Context(new OperationAdd());
console.log("10 + 5 = " + context.executeStrategy(10, 5));
context = new Context(new OperationSubstract());
console.log("10 - 5 = " + context.executeStrategy(10, 5));
context = new Context(new OperationMultiply());
console.log("10 * 5 = " + context.executeStrategy(10, 5));
/**
* output:
* 10 + 5 = 15
* 10 - 5 = 5
* 10 * 5 = 50
*/
策略模式的优势
策略和策略之间实现解耦,和状态模式类似可以通过此来消除一些if…else语句。