乐趣区

javascript设计模式–策略模式

策略模式的目的就是将算法的使用与算法的实现分离开来;将不变的部分和变化的部分隔开是每个设计模式的主题;
搬一个《设计模式与开发实践》中的例子。关于绩效工资的计算:
// 普通的写法
var calculateBonus = function(performanceLevel, salary){
if (performanceLevel === ‘S’){
return salary * 4;
}
if (performanceLevel === ‘A’){
return salary * 3;
}
if (performanceLevel === ‘B’){
return salary * 2;
}
};
calculateBonus(‘S’,20000);

这段代码最大的问题就是:弹性差,绩效规则一变就要去改函数,新加一套规则那就更难受了;
问题出在:算法的设计和算法的使用,混杂在了一起;
所以我们要把算法的设计分离出来;

// 使用了策略模式
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);
};
calculateBonus(‘S’, 20000);

strategies 是一个策略类,calculateBonus 函数接受参数后会把请求委托给一个策略类;
strategies 是算法的实现,一般不变;
calculateBonus 是对算法的使用,可变;
将不变的部分和变化的部分隔开是每个设计模式的主题;

退出移动版