定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。

    策略模式至少由两部分组成

    1. 策略类,封装具体的算法,负责计算过程。
    2. 环境类,接受请求,并将请求委托给策略类。

    在js中,函数天然就是对象,策略类直接被封装在对象中(这句话是我自己说的)

    1. var strategies = {
    2. "S": function (salary) {
    3. return salary * 4;
    4. },
    5. "A": function (salary) {
    6. return salary * 3;
    7. },
    8. "B": function (salary) {
    9. return salary * 2;
    10. }
    11. };

    环境类也不需要创建类,可以直接使用函数来实现委托的作用。

    1. var calculateBonus = function( level, salary ){
    2. return strategies[ level ]( salary );
    3. };

    策略模式的做法十分贴近写一堆配置项,然后通过委托函数来实现需要的配置。
    但是不禁让人产生思考,使用设计模式对后续的维护是否真的有益处?
    使用了设计模式会不会对没有了解过设计模式的人产生较高的理解门槛?
    而且目前的环境下,很多代码基本上不会有后期的维护和重构,在首次设计代码的时候运用设计模式是否无形增加了成本?
    但是对个人来说,该学还是得学。。。