前端之家收集整理的这篇文章主要介绍了
JavaScript设计模式之策略模式详解,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在程序设计中,我们也常常遇到这种情况,要实现某一个功能我们有很多种算法可以实现。
这些算法灵活多样,而且可以随意互相替换。这种解决方案就是所谓的策略模式。
策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。
函数体系庞大,拥有太多的if-else语句;
2、如果
增加绩效D,需
修改内部
函数,违背封闭-开放原则;
3、复用性差,其他地方如果用到计算奖金,只能赋值黏贴;
*/
//--------- 示例2 ------------
var performanceA = function(salary) {
return salary * 5;
};
var performanceB = function(salary) {
return salary * 4;
};
var performanceC = function(salary) {
return salary * 3;
};
var calculateBonus = function(performanceLevel,salary) {
if(performanceLevel === 'A') {
return performanceA(salary);
}
if(performanceLevel === 'B') {
return performanceB(salary);
}
if(performanceLevel === 'C') {
return performanceC(salary);
}
};
console.log(calculateBonus('A',2000));
/*
缺点:1、
函数体系庞大,系统变化时缺乏弹性
*/
//--------- 示例3 ------------
// 策略模式重构:定义一系列算法,将它们一个个封装起来。
var performanceA = function(){};
performanceA.prototype.caculate = function(salary){
return salary * 5;
};
var performanceB = function(){};
performanceB.prototype.caculate = function(salary){
return salary * 4;
};
var performanceC = function(){};
performanceC.prototype.caculate = function(salary){
return salary * 3;
};
var Bonus = function(){
this.salary = null;
this.strategy = null;
};
Bonus.prototype.setSalary = function(salary){
this.salary = salary;
};
Bonus.prototype.setStrategy = function(strategy){
this.strategy = strategy;
}
Bonus.prototype.getBonus = function(){
return this.strategy.caculate(this.salary);
}
var bonus = new Bonus();
bonus.setSalary(2000);
bonus.setStrategy(new performanceA());
console.log(bonus.getBonus());
// ----------- 示例4 ---------------
// javaScript版本
var Strategies = {
"A":function(salary){
return salary 5;
},"B":function(salary){
return salary 4;
},"C":function(salary){
return salary * 3;
}
};
var caculateBonus = function(level,salary){
return Strategieslevel;
};
console.log(caculateBonus("A",2000));
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。