策略模式是定义一系列的算法,把它们一个个封装起来,而且使它们能够相互替换。算法
策略模式的目的就是使算法的使用与算法分离开来。封装的算法具备必定的独立性,不会随客户端的变化而变化。设计模式
咱们实现一个计数器的加减乘除来讲明策略模式markdown
function count(type, number1, number2) {
switch (type) {
case 'add':
return number1 + number2;
case 'subtract':
return number1 - number2;
case 'multiply':
return number1 * number2;
default:
return number1 / number2;
}
}
// if else
function count1(type, number1, number2) {
if (type === 'add') {
return number1 + number2;
} else if (type === 'subtract') {
return number1 - number2;
} else if (type === 'multiply') {
return number1 * number2;
} else {
return number1 / number2;
}
}
复制代码
使用策略模式app
const count = {
add(number1, number2) {
return number1 + number2;
},
subtract(number1, number2) {
return number1 - number2;
},
multiply(number1, number2) {
return number1 * number2;
},
divide(number1, number2) {
return number1 / number2;
},
};
count.add(2, 3); // 5
count.subtract(10, 3); // 7
count.multiply(2, 3); // 6
count.divide(6, 2); // 3
复制代码
策略模式是一种经常使用的设计模式 例如ide
表单校验的规则ui
页面须要根据不一样的条件渲染不一样的按钮lua
商店不一样的活动 计算价格url
......spa
减小重复代码 策略模式利用组合、委托和多态等技术和思想,减小不少模板代码。设计
扩展性 策略模式提供了对开放-封闭原则的完美支持,将算法封装在独立的策略类里面,使它们易于切换,易于理解,易于扩展。