消除if...else(1.表驱动)

问题一:if…else 过多

问题表现

if…else 过多的代码可以抽象为下面这段代码。其中只列出5个逻辑分支,但实际工作中,能见到一个方法包含10个、20个甚至更多的逻辑分支的情况。另外,if…else 过多通常会伴随着另两个问题:逻辑表达式复杂和 if…else 嵌套过深。

if (condition1) {
    if(cod){
	}else if(cod2){
	    if(cod){
		}else if(cod2){
			    if(cod){
				}else if(cod2){		
				}
		}
	}
} else if (condition2) {
    
} else if (condition3) {
    
} else if (condition4) {
    
} else {
    
}

通常,if…else 过多的方法,通常可读性和可扩展性都不好。从软件设计角度讲,代码中存在过多的 if…else 往往意味着这段代码违反了违反单一职责原则和开闭原则。而解决 if…else 过多问题的最大意义,往往就在于提高代码的可扩展性。

1.表驱动

适用场景

逻辑表达模式固定的 if…else
这种表驱动有点偏向于策略的切换

自定义 传入固定的参数K,固定的返回值V

        String strX = "";

        int t = 3;

        if (t==1){
            System.out.println("第一种");
        }else if (t==2){
            System.out.println("第二种");
        }else if (t==3){
            System.out.println("第三种");
        }

重构为

    public static void main(String[] args) {

        //hash表 驱动
        Map<String, Function<Integer,?>> actionMap = new HashMap<>();

		//表中放入lamda
        actionMap.put("t", (x) -> start(x));
        actionMap.put("", (x) -> start2(x));

        //直接调用固定 的返回固定的
        actionMap.get(strX).apply(t);
    }

    public static <T> T start(T t){return t;}
    public static <T> T start2(T t){return t;}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小小狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值