策略模式

 

主要解决:

  • 在有多种算法相似的情况下,使用 if...else 或 switch...case 所带来的复杂性和臃肿性

优点

  • 算法多样性,且具备自由切换功能;
  • 有效避免多重条件判断,增强了封装性,简化了操作,降低出错概率;
  • 扩展性良好,策略类遵顼 里氏替换原则,可以很方便地进行策略扩展;

缺点

  • 策略类数量增多,且所有策略类都必须对外暴露,以便客户端能进行选择;

核心

  • 对一个操作,需要执行多个需要判断的类似步骤,可以提供统一的封装,外部直接可选择性使用这些封装,不关心内部逻辑
  • 去掉判断语句,直接配置式使用

实际案例

  • 实现更优雅的表单验证
  • 游戏里的角色计分器
  • 棋牌类游戏的输赢算法
const obj = {
  A: (num) => num * 4,
  B: (num) => num * 6,
  C: (num) => num * 8
}

const getSum =function(type, num) {
  return obj[type](num)
}

  

原文地址:https://www.cnblogs.com/bigman-bugman/p/12247831.html