Java中的大量if else语句的替代方案
1.If else的编程替换方式
1.1使用switch替换
1.2一定情况下可以使用枚举
1.3使用规则引擎
当大量嵌套的if语句时,每个条件都描述了一条业务规则,以获得正确的逻辑处理。可以使用一个规则引擎降低将这种代码的复杂性。规则引擎对规则进行评估,并根据输入返回结果。
1.4基于if else 优化策略
if else 可使用三元符替换
优先判断条件,条件不满足的,逻辑及时中断返回;
融入策略模式;
工厂模式。
1.5基于框架的注解减少if else
使用validation-api 中的注解,校验参数。例如:@Max(value) @NotNull @Pattern(regexp)
- 处理方式
举例常见if else的业务处理写法
2.1 使用switch替换
2.2一定情况下可以使用枚举
public enum Operator {
ADD, MULTIPLY, SUBTRACT, DIVIDE
}
ADD {
@Override
public int apply(int a, int b) {
return a + b;
}
},
// other operators
public abstract int apply(int a, int b);
2.3使用工厂模式
1.将操作抽象成一个Operation接口,
3.分别实现加减乘除四个方法
4.然后通过操作工厂提供加减乘除操作
2.4 使用规则引擎
1.定义一个接口
2.实现这个接口
3.规则引擎接受一个表达式对象并返回结果,把表达式类设计成由两个整数对象和将被应用的运算符组成的一组。
4.定义一个自定义的AddRule类,它只在指定ADD操作时进行评估。
2.6 if else使用三目运算替换
2.5基于if else 优化策略
这个是网上找的开发中使用了大量的 if else 语句的代码样例。
2.5.1 策略模式
就是把每个if else 判断的内容划分成不同的策略模型(类似于 2.3)
2.5.2 策略模式+工厂+单例模式
策略就是 把if 的每个条件判断 拆分成策略,使用工厂和单例来实现if else 的 整体替换。
详细样例
3.if else使用的看法
3.1 If else 部分开发人员的见解
- 首先明确问题并不在if else上,而是在if else带来的“复杂度增加”上。把if else换成别的写法并不能减少复杂度。相反,少见的写法反而增加“认知负荷”进一步增加了代码的复杂度。
2.代码复杂度只会被转移,不会被消灭。不管是if-else、switch-case,还是map、array、table、表驱动,还是多态、策略模式,其实复杂度都没变,变的只是不同条件的处理代码的位置。
3.设计模式可以,但这种替代不能100%,因为设计模式有时候会麻烦和冗余,所以if else 加上高复用的函数体可能是更好,代码好读易维护,也容易读,所以if else并不是问题,问题是深度嵌套和不可复用的代码重复问题。
4.开发中else if 是避免不了的,有时候为了代码简介,提高可读性,是选择合适的方式替代,替代if else 有时候并不会减少代码量,只是复杂度的转移,总之,开发中择优而用。
if else替换方式