策略模式
特点
- 不同策略分开处理,为不同策略创建不同策略类各自进行维护,再准备环境类进行调用。
- 避免出现大量 if...else 或者 switch...case
- 注意和 状态机模式的区别,这里不是状态的变化,而是多种情况的判断,中间不存在相互转换。
- 策略模式 通过将判断变为顺序式调用来解决问题,可以将大段的判断规避掉,但是需要手动穷举策略类的调用。
介绍
-
策略模式 将一系列处理同一个或者相近问题的算法,进行封装,并根据请求不同,提供满足要求的算法
-
重点:封装变化、委托、多态性
- 封装变化:如何将数据的变化完整的记录在一个算法中
- 委托:对同一个问题的请求如何进行区分与组合,并对外统一入口环境
- 多态性:区分请求,尽可能详细而精确
-
JS 本身以函数为一等对象,这使得我们在不经意之间总是在使用高级函数(函数参数,函数返回值,apply,call)
-
所以策略模式在 JS 中本身就是一种隐式的存在,我们需要去考虑的就是如何保证对外入口统一且能进行精确而又多态的委托
demo
var performanceS = function (salary) {
return salary * 4;
};
var performanceA = function (salary) {
return salary * 3;
};
var performanceB = function (salary) {
return salary * 2;
};
var CalculateBonus = function (performance, salary) {
return performance(salary);
};
console.log(CalculateBonus(performanceS, 10000));
console.log(CalculateBonus(performanceA, 10000));
console.log(CalculateBonus(performanceB, 10000));