当前位置: 代码网 > it编程>编程语言>Java > Java 代码中 if/switch 重构方案的几种实现

Java 代码中 if/switch 重构方案的几种实现

2026年01月25日 Java 我要评论
在 java 开发中,想要避免出现大量 if...else 或 switch...case,可以使用多种设计模式和技巧来“消除条件分支”。下面总结几种常用、实战有效的方案。1.

在 java 开发中,想要避免出现大量 if...else 或 switch...case,可以使用多种设计模式和技巧来“消除条件分支”。下面总结几种常用、实战有效的方案。

1. 使用枚举 + lambda

适合一些轻量级逻辑分派。

package com.example.demo.enums;

import lombok.allargsconstructor;

import java.util.function.bifunction;

@allargsconstructor
public enum operationenum {
    add((a, b) -> a + b),
    sub((a, b) -> a - b),
    mul((a, b) -> a * b),
    div((a, b) -> a / b);

    private final bifunction<integer, integer, integer> function;

    public int apply(int a, int b) {
        return function.apply(a, b);
    }
}

使用代码,方法参数传递过来一个枚举,直接调用 apply 方法就行:

public static void main(string[] args) {
    int result = operation(operationenum.mul, 2, 3);
    system.out.println(result);
}

//这个方法减少了ifelse判断
private static int operation(operationenum operationenum, int a, int b) {
    return operationenum.apply(a, b);
}

2. 使用枚举 + lambda + map

适合简单分派逻辑。

package com.example.demo.enums;

import lombok.allargsconstructor;
import lombok.getter;

@getter
@allargsconstructor
public enum actionenum {

    action_a("a"),
    action_b("b");

    private final string action;
}
package com.example.demo.handler;

import com.example.demo.enums.actionenum;

import java.util.hashmap;
import java.util.map;

public class actionhandler {
    private static final map<string, runnable> action = new hashmap<>();

    static {
        action.put(actionenum.action_a.getaction(), () -> system.out.println("执行逻辑 a"));
        action.put(actionenum.action_b.getaction(), () -> system.out.println("执行逻辑 b"));
    }

    public static void execute(actionenum actionenum) {
        action.getordefault(actionenum.getaction(), () -> system.out.println("默认逻辑")).run();
    }
}

使用代码:

actionhandler.execute(actionenum.action_a);

3. 使用责任链模式

适合逐步判断、条件过滤的业务,比如审批、数据校验。可自由扩展处理链,避免多层 if 嵌套。

首先提供一个抽象类,request是个辅助类,可根据真实业务修改:

package com.example.demo.handler;

import lombok.data;

@data
public class request {
    private boolean authenticated;
    private boolean validate;
}
package com.example.demo.handler;

import lombok.setter;

public abstract class handler {
    @setter
    protected handler next;

    public abstract void handle(request request);
}

三个继承抽象类的子类:

package com.example.demo.handler;

public class authhandler extends handler {
    @override
    public void handle(request request) {
        if (request.isauthenticated()) {
            system.out.println("login success");
            if (next != null) {
                next.handle(request);
            }
        } else {
            system.out.println("login fail");
        }
    }
}
package com.example.demo.handler;

public class validationhandler extends handler{
    @override
    public void handle(request request) {
        if (request.isvalidate()){
            system.out.println("validation success");
            if (next != null) {
                next.handle(request);
            }
        }else {
            system.out.println("validation failed");
        }
    }
}
package com.example.demo.handler;

public class businesshandler extends handler {
    @override
    public void handle(request request) {
        system.out.println("start handler business");
    }
}

使用代码:

request request = new request();
request.setauthenticated(true);
request.setvalidate(true);
authhandler authhandler = new authhandler();
validationhandler validationhandler = new validationhandler();
businesshandler businesshandler = new businesshandler();
//设置处理顺序
authhandler.setnext(validationhandler);
validationhandler.setnext(businesshandler);
//开始触发执行
authhandler.handle(request);

执行结果:

login success
validation success
start handler business

4. 使用策略模式

参考我的另一篇博文:springboot 优雅实现接口的多实现类方式

到此这篇关于java 代码中 if/switch 重构方案的几种实现的文章就介绍到这了,更多相关java if/switch 重构内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com