对于 if else if 结构,实质情况是: 分支会从上到下判断,但是最终只会进入一个分支内。所以可以通过匹配不同的条件,就执行具体对应分支的代码。
职责链模式
通过对 存储[判定规则]的数组,来实现这种行为。如果规则匹配,就进入对应分支。把这样数组称为 [职责链]。
// 职责链数组
const rules = [
{
match: (args) => args > 1,
action: (args) => args + 1
},
{
match: (args) => args < 1,
action: (args) => args - 1
},
{
match: (args) => args = 1,
action: (args) => args
},
]
rules数组中 具有match(判定规则),actions(对应分支) 。 只需要对 职责链数组进行遍历就行。
function mapRules(args) {
for(let i = 0; i < rules.length; i++) {
if(rules[i].match(arg)) {
return rules[i].action(arg)
}
}
}
一旦匹配到相应的规则,就能够找到对应的 分支出口,这样就实现了对 if else if 复杂逻辑的简单拆分。