Java 根据两个变量值做不同业务处理的解决方案

定义两个变量a,b。a可取值为 1, 2, 3 ,b可取值为4, 5, 6

if(a = 1 && b = =4){
 handler1();
}

if(a =1 && b == 5){
handler2();
}

if(a =2 && b == 4){
handler3();
}

....

a ,b 类型不固定,也可为枚举

这种通过a,b 取不同值,做不同业务,除了用if 判断,有更好的方式么?

参考GPT和自己的思路:你可以使用一个 Map 来存储不同组合的业务处理代码。具体实现方式如下所示:

  1. 定义一个 Map,key 为 a 和 b 的组合形成的字符串,value 为相应的业务处理代码。如下所示:
Map<String, Runnable> handlerMap = new HashMap<>();
handlerMap.put("1,4", () -> handler1());
handlerMap.put("1,5", () -> handler2());
handlerMap.put("2,4", () -> handler3());
...
  1. 使用 a 和 b 的值来拼接成一个 key,然后从 Map 中获取相应的业务处理代码并执行,如下所示:
String key = a + "," + b;
handlerMap.getOrDefault(key, () -> {}).run();

这样可以避免大量的 if 判断,使代码更加清晰易读。不过需要注意的是,如果使用枚举类型作为 a 和 b 的类型,需要将枚举值拼接成字符串来作为 Map 的 key。

  • 通用策略模式 替换 if,可以看看我的这篇:
    https://blog.csdn.net/u012855229/article/details/119817362
  • a和b两者的组合键 作为策略Map的键,比如 a=1,b=4, 可以组合为 1_4 作为策略键。策略上下文中的 策略Map集合就可以预先定义好 不同组合的策略实现,每种组合都有个具体的实现类来完成if的功能。

不用If,也可以用switch case来做:

switch(a){
  case 1: switch(b){
                case 4:xxx
                case 5: xxx
               }
  case 2: switch(b){
                case 4:xxx
                case 5: xxx
               }
}