策略模式

策略模式

原理

  定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换

用途

  根据实际的场景,运用对应的策略

组成

  • 策略类 => 封装了具体的算法,并负责具体的计算过程
  • 环境类 => Context 接受客户的请求,随后把请求委托给某一个策略类

优点

  • 利用组合、委托和多态等技术和思想,可以有效地避免多重条件选择语句
  • 提供了对开放—封闭原则的完美支持,将算法封装在独立的strategy 中,使得它们易于切换,易于理解,易于扩展
  • 复用在系统的其他地方,从而避免许多重复的复制粘贴工作
  • 利用组合和委托来让Context 拥有执行算法的能力,这也是继承的一种更轻便的替代方案

缺点

  • 使用策略模式会在程序中增加许多策略类者策略对象
  • 此时strategy 要向客户暴露它的所有实现,这是违反最少知识原则的
// 场景根据不同的级别计算不同的薪资
let bonusLevel = {
  a: money => {
    return 1 * money;
  },
  b: money => {
    return 2 * money;
  },
  c: money => {
    return 3 * money;
  },
  d: money => {
    return 4 * money;
  }
};
/**
 * 使用策略模式计算奖金
 * @describe: 普通函数利用策略设计模式
 * @param     {[type]}   money [description] 工资
 * @param     {[type]}   type  [description] 哪个等级
 */
function getBonus(money, type) {
  return bonusLevel[type](money);
}
let bonus = getBonus(2000, "d");
// console.log(bonus)


  转载请注明: 迷一样的自信 策略模式

 上一篇
运算中的小技巧 运算中的小技巧
运算中的小技巧 利用~~进行类型的转换,数字类型 ~~true => 1 ~~false => 0 ~~”” => 0 ~~[] => 0 ~~undefined => 0 ~~!undefined =&g
2018-06-16
下一篇 
代理模式 代理模式
代理模式原理  为一个对象提供一个代用品或占位符,以便控制对它的访问。(替身对象对用户的请求做出一些处理后再把请求转发给本体对象) 保护代理  用于对象应该有不同访问权限的情况 虚拟代理  需要代理者帮用户做一些请求(有时自己的一些请求的代
2018-06-07
  目录