开发者社区> 问答> 正文

有很多if-else该如何优化?

screenshot
这是我重构之后的代码:
screenshot
screenshot

展开
收起
蛮大人123 2016-03-10 18:24:04 3678 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    在if 不满足条件时直接return掉,就不用写else了,这样可以减少if的深度
    对于你的例子了,如下:

    if (!tokenCheck.equals(token)) {
        obj.setStatus();
        obj.setMsg();
        return obj;
    }
    
    if (!isContinue) {
        obj.setStatus();
        obj.setMsg();
        return obj;
    }
    
    if (action == 20) {
        // TODO
    } else if (action == 30) {
        // TODO
    }

    这样会让代码好看一点.

    如果你纠结设计模式的话,可以把“调用系统通知”和"调用短信接口"抽象成策略,实现共同的接口;
    每个策略提供一个accept方法用于判断是否接受传入的actionId,如果accept通过,就可调用该策略的execute方法。

    List<Strategy> strategys = new ArrayList<>();
    strategys.add(new SystemNoticeStrategy());
    strategys.add(new MessageStrategy());
    
    for (Strategy stragety : stragetys) {
        if (strategy.accept(actionId)) {
            strategy.execute();
            break;
        }
    }

    这个的缺点是要遍历list,其实性能开销并不会太大。
    也可以把这些strategys放到map里,然后直接根据actionId从map中取出并执行。
    这是一种实现思路,可能还会有更好的方式。

    2019-07-17 18:58:08
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Blade优化技术在广告计算中的应用优化 立即下载
如何做小程序性能优化 立即下载
图计算优化技术探索 立即下载