
我个人理解的策略模式就是把原本 if...else
中的条件判断存到一个对象的 key
上,让原本命令式代码转变为申明式。极大的增加了代码灵活性和可读性。
这个写法用的好,代码可以写的赏心悦目。
基本用法
场景:不同的任务类型分配不同的奖池
javascript
function getRewards (taskType) {
if (taskType === 1) {
return ['手机', '电脑', '平板']
}
else if (taskType === 2) {
return ['水杯', '笔记本']
}
}
javascript
function getRewards (taskType) {
const rewardMap = {
1: ['手机', '电脑', '平板'],
2: ['水杯', '笔记本'],
}
return rewardMap[taskType]
}
本质上是一种形式的规范,从过于灵活的形式变化为整齐有规律的形式。
复杂用法
当条件比较复杂时,就可以有一些不同的花样可以玩。
场景:不同的年龄段分配不同的底薪
javascript
function getBaseSalary (age) {
const baseSalaryMap = {
s1: {
condition: (age) => age < 20,
baseSalary: 1000,
},
s2: {
condition: (age) => age >= 20 && age < 30,
baseSalary: 2000,
},
s3: {
condition: (age) => age >= 30,
baseSalary: 3000,
},
}
return (
Object
.values(baseSalaryMap)
.find((item) => item.condition(age))
.baseSalary
)
}
场景:两个开关控制一个灯
javascript
function getBaseSalary (switch1, switch2) {
const resMap = {
true_true: '1',
true_false: '2',
false_true: '3',
false_false: '4',
}
return resMap[`${switch1}_${switch2}`]
}
还有什么更有趣的场景,评论区可以留言分享。