if else 嵌套优化
function Demo (a, b, c) {
if (func1(a, b, c)) {
action ((a, b, c)=>{
// do something...
})
} else if (func2(a, b, c)) {
// do something...
action ((a, b, c)=>{
// do something...
})
}else if (func3(a, b, c)) {
action ((a, b, c)=>{
// do something...
})
}
}
func1(a,b,c){ do something}
func2(a,b,c){ do something}
func3(a,b,c){ do something}
各个分支控制下的代码如下:
image.png
优化后
const RuleMap = [
{
rule: func1(a, b, c) { do something //判断是否匹配// },
action :function (a, b, c) {do something...}
},
{
rule: func2(a, b, c) { do something },
action :function (a, b, c) {do something...}
},
{
rule: func3(a, b, c) { do something },
action :function (a, b, c) {do something...}
}
]
function Control (a, b, c) {
for (let i = 0; i < RuleMap.length; i++) {
if (RuleMap[i].rule(a, b, c)) {
return RuleMap[i].action(a, b, c)
}
}
}
RuleMap是所有判断规则和其执行方法的合集,RuleMap 中的每一项都具有 rule(规则) 与 action (方法)属性。这时可以将原有函数的 else if 改写对职责链数组的遍历。这时每个rule一旦匹配,函数就会直接返回,通过此方法可以实现对单体复杂 else if 逻辑的拆分。
image.png
网友评论