策略模式

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、使用场景

策略模式是一种常用的设计模式 例如

  • 表单校验的规则

  • 页面需要根据不同的条件渲染不同的按钮

  • 商店不同的活动 计算价格