本文最后更新于 2024-03-23T16:42:00+00:00
核心:定义一系列算法,并将每个算法封装在具有共同接口的单独对象中,并可替换。
场景:处理一系统相同但有细微差别的逻辑
代码实现:根据绩效计算奖金
未使用策略模式:代码写死了
1 2 3 4 5 6 7 8 9 10 11 12
| function getMoney(jixiao, baseMoney) { if(jixiao === 's') return baseMoney * 2 else if(jixiao === 'a') return baseMoney * 1.5 else if(jixiao === 'b') return baseMoney * 1 else if(jixiao === 'c') return baseMoney * 0.8 else if(jixiao === 'd') return baseMoney * 0.5 else return baseMoney * 0 }
getMoney('s', 1000) getMoney('a', 1000) getMoney('c', 1000)
|
使用了策略模式:策略可随时替换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| const moneyStrategie1 = { s(baseMoney) { return baseMoney * 2 }, a(baseMoney) { return baseMoney * 1.5 }, b(baseMoney) { return baseMoney * 0.8 }, c(baseMoney) { return baseMoney * 0.5 }, d(baseMoney) { return baseMoney * 0 } }
const moneyStrategie2 = { s(baseMoney) { return baseMoney * 20 }, a(baseMoney) { return baseMoney * 15 }, b(baseMoney) { return baseMoney * 8 }, c(baseMoney) { return baseMoney * 5 }, d(baseMoney) { return baseMoney * 0 } }
function getMoney(strategy) { this.calcMoney = (jixiao, baseMoney) => { return strategy[jixiao](baseMoney) } }
const getMoney1 = new getMoney(moneyStrategie1)
getMoney1('s', 1000) getMoney1('a', 1000) getMoney1('c', 1000)
const getMoney2 = new getMoney(moneyStrategie2)
getMoney1('s', 1000) getMoney1('a', 1000) getMoney1('c', 1000)
|
总结:就是将零散的判断逻辑,封装在单独的对象中,并提供一个策略切换函数。