定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换
翻译成人话:根据不同的情况,可以自由调用已经封装好的函数(算法)。
再来看看官方定义:策略模式由两部分组成;第一部分是策略组,封装具体算法,负责具体的计算过程;第二部分是环境类,接受客户请求,然后委托给某一个策略类去处理。
- js 中的策略模式
一个计算年终奖的例子
// 第一部分:策略组,负责具体的实现过程
var strategies = {
"S": function( salary ){
return salary * 4;
},
"A": function( salary ){
return salary * 3;
},
"B": function( salary ){
return salary * 2;
}
};
// 第二部分:环境类, 接受客户请求,委托给策略组处理
var calculateBonus = function( level, salary ){
return strategies[ level ]( salary );
};
console.log( calculateBonus( 'S', 20000 ) ); // 输出:80000
console.log( calculateBonus( 'A', 10000 ) ); // 输出:30000
如果不用这种方式写,使用传统的if-else
语句,缺点如下:
需要覆盖所有的逻辑分支,后期更改代码,需要深入到函数内部。
- 拓展
策略模式中的 策略组不仅用来封装算法,可以用来封装业务逻辑。
表单验证例子
**用户名不能为空
**密码长度不能少于6位
**手机号必须符合格式
常规方法:if-else
语句
策略模式:P81 一步一步的优化。
网友评论