1.定义:定义一系列算法,把它们一个一个封装起来,并且使它们可以相互替换。 策略模式可以用来减少if-else 语句的使用。
2.实例:个人年终奖计算,奖金金额与个人薪资和绩效等级有关。
原始实现方式 var calculateBonus = function(level,salary){ if(level === 'A++'){ return 4*salary; } if(level === 'A+'){ return 3*salary; } if(level === 'A'){ return 2*salary; } }; calculateBonus('A++',50000); calculateBonus('A+',20000);可以看出,代码中含有很多if-else语句,可扩展性差(一旦算法改变就必须修改内部实现),复用性差(如果其他地方需要重用奖金计算算法就得整个函数拷贝)。
策略模式 var strategies = { 'A++':function(salary){ return 4*salary; }, 'A+':function(salary){ return 3*salary; }, 'A':function(salary){ return 2*salary; } }; var calculateBonus = function(level,salary){ return strategies[level](salary); } calculateBonus('A++',50000); calculateBonus('A+',20000);