定义一系列的算法,把他们各自封装成策略类,算法被封装在策略类的方法里,在客户度Context发起请求的时候,Context总是把请求委托给这些策略对象中间的某一个进行计算。
5.1 使用策略模式计算奖金
面向对象方式
class Performance S {calculate(salary) {return salary * 4;}}class Performance A {}class Performance B {}
class Bonus {salary = null;strategy = null;setSalary() {}setStrategy() {}getBonus() {return this.strategy.calculate(this.salary);}}
var bonus = new Bonus();bonus.setSalary(1000);bonus.setStrategy(new PerformanceS());console.log(bonus.getBonus());bonus.setSalary(800);bonus.setStrategy(new PerformanceA());console.log(bonus.getBonus());
JavaScript版本的策略模式
var strategies = {
‘S’: function () {}
‘A’: function () {}
‘B’: function () {}
}
var calculateBonus = function (level, salary) {
return strategieslevel;
}
一等函数对象和策略模式
表单校验
使用策略模式重构代码,通过“配置”的方式进行表单校验。
