在程序设计中,经常遇到一个功能有很多方案可以选择,一个过程下有很多条件分支。
最初的实现方案是对每个情况用if-els判断,如下:
var calculateBonuw=function(level,salary){
if(level=='s'){
return salary*4;
}else if(level=='a'){
return salary*5;
}else if(level=='b'){
return salary*6;
}
}
calculateBonuw('s',2000); //8000
calculateBonuw('a',1000); //5000
上面的代码看起来很简单,但是问题也很明显,如果增加level=‘c’的情况,就需要在if-else语句中再加一组代码加以判断,这违背了开放-封闭原则。
策略模式的定义是:定义一系列的算法,把他们一个个的封装起来,并且是他们可以相互替换。
策略模式的目的就是把算法的使用和算法的实现分离开来。
var strategies={
"s":function(salary){
return salary*4;
},
"a":function(salary){
return salary*5;
},
"b":function(salary){
return salary*6;
}
}
var caluateBonus = function(level,salary){
return strategies[level](salary);
}
caluateBonus("s",2000); //8000
caluateBonus("a",1000); //5000