策略模式:定义一系列的算法,把他们一个个封装起来,并且可以相互替换
参见《javascript设计模式与开发实践》
解决问题:公司的绩效根据员工的工资和年度绩效来决定。每个人的工资和绩效是不同的,但是计算方法是相同的。
js版的策略模式
//定义三个不同绩效的策略,每个绩效的策略实际的计算结果还有传入的参数来计算
var strategies = {
"S": function( salary ){ //s是绩效,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```
通过策略模式,策略和实际的计算方法分工明确,关系解耦和,各自发生改变都不改变另一部分的代码结构和内容。在具体策略中也不会出现紧耦合的判读选择语句。