设计模式-策略模式

来源:互联网 发布:文件恢复软件recovery 编辑:程序博客网 时间:2024/06/03 06:26

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);