策略模式的目的就是将算法的使用与算法的实现分离开来;将不变的部分和变化的部分隔开是每个设计模式的主题;搬一个《设计模式与开发实践》中的例子。关于绩效工资的计算:// 普通的写法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 ;};calculateBonus( ‘S’, 20000 );strategies是一个策略类,calculateBonus函数接受参数后会把请求委托给一个策略类;strategies是算法的实现,一般不变;calculateBonus是对算法的使用,可变;将不变的部分和变化的部分隔开是每个设计模式的主题;