#策略模式

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

如 将 if-else 改为对象映射替换,ifelse 拓展是需要改变函数的,不符合开放封闭

而对象是可直接扩展的,符合开放封闭

// 处理预热价
function prePrice(originPrice) {
  if (originPrice >= 100) {
    return originPrice - 20
  }
  return originPrice * 0.9
}

// 处理大促价
function onSalePrice(originPrice) {
  if (originPrice >= 100) {
    return originPrice - 30
  }
  return originPrice * 0.8
}
// 询价函数
function askPrice(tag, originPrice) {
  // 处理预热价
  if (tag === 'pre') {
    return prePrice(originPrice)
  }
  // 处理大促价
  if (tag === 'onSale') {
    return onSalePrice(originPrice)
  }
}
// 定义一个询价处理器对象
const priceProcessor = {
  pre(originPrice) {
    if (originPrice >= 100) {
      return originPrice - 20
    }
    return originPrice * 0.9
  },
  onSale(originPrice) {
    if (originPrice >= 100) {
      return originPrice - 30
    }
    return originPrice * 0.8
  },
}
// 询价函数
function askPrice(tag, originPrice) {
  return priceProcessor[tag](originPrice)
}

#小结

策略模式是对逻辑的封装,使用时选择不同的逻辑