实际开发中我们经常遇到判断条件很多的情况,比如下图有20多种情况,不用想肯定是要优化代码的,需要思考的是如何去优化?

代码优雅之道——如何干掉过多的 if else_工厂模式


if else能够把复杂的逻辑关系表达得清晰、易懂,包容了程序执行的各种情况。

switch不适合业务系统的实际复杂需求,业务不断的变更迭代,一更改需求,条件的复杂度高了,switch无力处理。

switch经常忘记写break,估计很多人一不小心就忘记写了。

switch…case只能处理case为常量的情况。

当情况不大于5种并且单一变量的值(如枚举),此时我们就可以使用switch,它的可读性比if条件更清晰。

除了上述说到枚举的这种场景,建议使用switch,其他个人愚见:只要情况不大于5种就直接使用if else

3策略+工厂模式

上述说到情况较少时并且业务逻辑不复杂的使用if else可以让代码清晰明了。当每种情况对应的业务逻辑复杂时,建议使用策略+工厂模式。这里我们举个栗子:厂家每个季度要举行不同的活动,我们使用策略工厂模式来实现

策略接口

public interface Strategy {

    /**
     * 处理各种活动
     * @return
     */
    String dealActivity();
}

然后春夏秋冬四季活动类实现该接口

代码优雅之道——如何干掉过多的 if else_业务逻辑_02

@Service
public class SpringActivity implements Strategy{
    @Override
    public String dealActivity() {
        return "春季活动逻辑";
    }
}

策略类工厂

代码优雅之道——如何干掉过多的 if else_业务逻辑_03

然后在service层中传入对应的编码即可 ,我这里省略了service

代码优雅之道——如何干掉过多的 if else_工厂模式_04

代码优雅之道——如何干掉过多的 if else_工厂模式_05

上述已经干掉了if else ,后续季度活动调整去修改对应活动策略类中逻辑即可。

缺点:如果情况比这多,那么策略类会越来越多,也就是所谓的策略类膨胀,并且没有一个地方可以俯视整个业务逻辑。

4Map+函数式接口

将上述策略类全部作为方法。Map+函数式接口优化的方法,可以参考这里,讲解的比较细致:Map+函数式接口,“更完美” 的解决 if-else的问题

代码优雅之道——如何干掉过多的 if else_业务逻辑_06

再写个活动Service

代码优雅之道——如何干掉过多的 if else_业务逻辑_07

改变Controller

代码优雅之道——如何干掉过多的 if else_业务逻辑_08

最后说一句(求关注!别白嫖!)

如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、转发、在看。

关注公众号:woniuxgg,在公众号中回复:笔记  就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!