码迷,mamicode.com
首页 > 其他好文 > 详细

if...else代码优化

时间:2020-04-04 16:12:59      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:ide   static   cte   err   handler   set   hash   lte   ext   

在编码中难免遇到if else过多情况,一方面是当初设计没有在意,另一方面可能是因为需求的不断变化。但代码中出现大量if else都知道这种情况不太好,那么我们就聊一下这种情况应该如何优化

if(条件1){
    ....
}else if(条件2){
    ....
}else if(条件3){
    ....
}else{
    ....
}

1.表驱动

表驱动是指用查表的方式获取值

private static Map<Status, Function<Integer, Integer>> conditions;
static {
    conditions = new HashMap<>();
    conditions.put(Status.CONDITION1,(t)->{
        return t+1;
    });
    conditions.put(Status.CONDITION2,(t)->{
        return t+2;
    });
}

@Test
public void test(){
    Integer apply = conditions.get(Status.CONDITION1).apply(1);
    System.out.println(apply);
}

enum Status{
    CONDITION1,CONDITION2;
}

2.责任链模式

当判断条件复杂多变时,就无法使用上述的驱动表了。
责任链使用比较多的场景比如:Filter、Interceptor。

abstract class Handler {

    protected Handler next;

    public void setNext(Handler next) { // 设置下一个处理者
        this.next = next;
    }

    public abstract void handlerRequest(int request); // 请求处理逻辑
}

class ConcreteHandler1 extends Handler {
    @Override
    public void handlerRequest(int request) {
        if (request >= 0) {
            System.out.println("request >= 0");
        } else {
            // 如果不满足条件进行下一次
            next.handlerRequest(request); // 将请求发送给下一位
        }
    }
}
class ConcreteHandler2 extends Handler {
    @Override
    public void handlerRequest(int request) {
        if (request >= 10) {
            System.out.println("request >= 10");
        } else {
            // 如果不满足条件进行下一次
            next.handlerRequest(request); // 将请求发送给下一位
        }
    }
}

public class TestHandler {
    public static void main(String[] args) {
        Handler handler1 = new ConcreteHandler1();
        Handler handler2 = new ConcreteHandler2();
        // 设置责任链的下家
        handler1.setNext(handler2);
        handler1.handlerRequest(8);
    }
}

if...else代码优化

标签:ide   static   cte   err   handler   set   hash   lte   ext   

原文地址:https://blog.51cto.com/13733462/2484881

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!