java实战技巧之if-else代码优化技巧大全
前言
在实际的业务开发当中,经常会遇到复杂的业务逻辑,可能部分同学实现出来的代码并没有什么问题,但是代码的可读性很差。本篇文章主要总结一下自己在实际开发中如何避免大面积的 if-else 代码块的问题。补充说明一点,不是说 if-else 不好,而是多层嵌套的 if-else 导致代码可读性差、维护成本高等问题。
现有如下一段示例代码,部分优化技巧是根据这段代码进行的
技巧一:提取方法,拆分逻辑
比如上面这段代码中
这里可以拆分成两段逻辑,核心思想就是逻辑单元最小化,然后合并逻辑单元。
技巧二:分支逻辑提前return
比如 技巧一 中的 getcitynull 方法,我们可以这样写
技巧三:枚举
经过 技巧一 和 技巧二 的优化,文章开头的这段代码被优化成如下所示:
现在利用 枚举 来优化 getcitynull 方法中的 for 循环部分代码,我们可以看到这段代码中有4段逻辑,总体形式如下:
按照这个思路利用枚举进行二次优化,将其中的逻辑封装到枚举类中:
然后 getcitynull 方法中 for 循环部分逻辑如下:
其实在这个业务场景中使用枚举并不是特别合适,如果在遍历对象时,我们就知道要执行哪个枚举类型,此时最合适,伪代码如下:
技巧四:函数式接口
业务场景描述:比如让你做一个简单的营销拉新活动,这个活动投放到不同的渠道,不同渠道过来的用户奖励不一样。现假设在 头条、微信 等渠道都投放了该活动。此时你的代码可能会写出如下形式:
看完这段代码,逻辑上是没有什么问题的。但它有一个隐藏的缺陷,如果后期又增加很多渠道的时候,你该怎么办?继续 else if 吗?其实我们可以利用函数式接口优化,当然设计模式也可以优化。这里我只是举例使用一下函数式接口的使用方式。
针对一些复杂的业务场景,业务参数很多时,可以利用 @functionalinterface
自定义函数式接口来满足你的业务需求,使用原理和本例并无差别。
技巧五:设计模式
设计模式对于if-else的优化,我个人觉得有些重,但是也是一种优化方式。设计模式适合使用在大的业务流程和场景中使用,针对代码块中的if-else逻辑优化不推荐使用。
常用的设计模式有:
- 策略模式
- 模板方法
- 工厂模式
- 单例模式
还是以上面的营销拉新活动为例来说明如何使用。
使用技巧一:工厂模式+抽象类
- 定义抽象业务接口
- 定义具体业务实现类
- 利用工厂模式获取实例对象
- 业务入口处根据不同渠道执行不同的发放逻辑
使用技巧二:策略模式+模板方法+工厂模式+单例模式
还是以营销拉新为业务场景来说明,这个业务流程再增加一些复杂度,比如发放奖励之前要进行 身份验证、风控验证 等一些列的校验,此时你的业务流程该如何实现更清晰简洁呢!
- 定义业务策略接口
- 定义奖励发放模板流程
- 实现不同渠道的奖励业务
- 定义工厂方法,对外统一暴露业务调用入口
- 业务入口方法
假如发起请求: post http://localhost:8080/activity/reward3?userid=fei&source=wx
其他技巧
- 使用三目运算符
- 相同业务逻辑提取复用
写在最后
不论使用那种技巧,首先是我们在业务代码开发过程中一定要多思考,将复杂的业务逻辑能通过简洁的代码表现出来,这才是你的核心能力之一,而不是一个 curd boy。与君共勉,共同进步!
到此这篇关于java实战技巧之if-else代码优化技巧的文章就介绍到这了,更多相关java if-else代码优化技巧内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!