javascript设计模式--策略模式

策略模式的目的就是将算法的使用与算法的实现分离开来;

将不变的部分和变化的部分隔开是每个设计模式的主题;

搬一个《设计模式与开发实践》中的例子。
关于绩效工资的计算:

// 普通的写法
var calculateBonus = function( performanceLevel, salary ){
    if ( performanceLevel === 'S' ){ 
        return salary * 4;
    }
    if ( performanceLevel === 'A' ){ 
        return salary * 3;
    }
    if ( performanceLevel === 'B' ){ 
        return salary * 2;
    } 
};
calculateBonus('S',20000);
  • 这段代码最大的问题就是:弹性差,绩效规则一变就要去改函数,新加一套规则那就更难受了;
  • 问题出在:算法的设计和算法的使用,混杂在了一起;
  • 所以我们要把算法的设计分离出来;
// 使用了策略模式
var strategies = {
    "S": function( salary ){
        return salary * 4; 
    },
    "A": function( salary ){ 
        return salary * 3;
    },
    "B": function( salary ){
        return salary * 2;
    }
};
var calculateBonus = function( level, salary ){ 
    return strategies[ level ]( salary );
};
calculateBonus( 'S', 20000 );
  • strategies是一个策略类,calculateBonus函数接受参数后会把请求委托给一个策略类;
  • strategies是算法的实现,一般不变;
  • calculateBonus是对算法的使用,可变;
  • 将不变的部分和变化的部分隔开是每个设计模式的主题;
    原文作者:设计模式
    原文地址: https://segmentfault.com/a/1190000017858578
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞