定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
如 将 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)
}
策略模式是对逻辑的封装,使用时选择不同的逻辑