定义一系列的算法,把他们各自封装成策略类,算法被封装在策略类的方法里,在客户度Context发起请求的时候,Context总是把请求委托给这些策略对象中间的某一个进行计算。

5.1 使用策略模式计算奖金

面向对象方式

  1. class Performance S {
  2. calculate(salary) {
  3. return salary * 4;
  4. }
  5. }
  6. class Performance A {}
  7. class Performance B {}
  1. class Bonus {
  2. salary = null;
  3. strategy = null;
  4. setSalary() {}
  5. setStrategy() {}
  6. getBonus() {
  7. return this.strategy.calculate(this.salary);
  8. }
  9. }
  1. var bonus = new Bonus();
  2. bonus.setSalary(1000);
  3. bonus.setStrategy(new PerformanceS());
  4. console.log(bonus.getBonus());
  5. bonus.setSalary(800);
  6. bonus.setStrategy(new PerformanceA());
  7. console.log(bonus.getBonus());

JavaScript版本的策略模式

var strategies = {
‘S’: function () {}
‘A’: function () {}
‘B’: function () {}

}
var calculateBonus = function (level, salary) {
return strategieslevel;

}

一等函数对象和策略模式

高阶函数作为策略传递到另一个函数。

表单校验

使用策略模式重构代码,通过“配置”的方式进行表单校验。