策略模式
2022/6/22 设计模式
# 1、什么是策略模式
单例模式,定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。
# 2、单例模式的实现思路
策略模式是要定义一系列的算法,把它们一个个封装起来。将不变的部分和变化的部分隔开是每个设计模式的主题,策略模式也不例外, 策略模式的目的就是将算法的使用与算法的实现分离开来。
策略模式在开发的过程中,至少需要 2 部分。
- 第一个部分是一组策略类,策略类封装了具体的算法,并负责具体的计算过程。
- 第二个部分是环境类 Context,Context 接受客户的请求,随后 把请求委托给某一个策略类。要做到这点,说明 Context 中要维持对 某个策略对象的引用。
# 3、JavaScript 实现
比如累
'use strict';
/**
* 策略类
*/
// S绩效策略类
class SLevel {
calculate(salary) {
return salary * 5;
}
}
// A绩效策略类
class ALevel {
calculate(salary) {
return salary * 3;
}
}
// B绩效策略类
class BLevel {
calculate(salary) {
return salary * 2;
}
}
/**
* 奖金类(对应环境类Context)
*/
class Bonus {
constructor() {
this.salary = null; // 薪资
this.strategy = null; // 绩效等级
}
// 设置员工的薪资
setSalary(salary) {
this.salary = salary;
}
// 设置绩效等级对应的策略对象
setStrategy(strategy) {
this.strategy = strategy;
}
// 取得对应的奖金
getBonus() {
return this.strategy.calculate(this.salary);
}
}
# 4、使用场景
策略模式是一种常用的设计模式 例如
表单校验的规则
页面需要根据不同的条件渲染不同的按钮
商店不同的活动 计算价格