优化 if else if

241

对于 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 复杂逻辑的简单拆分。