在线客服
扫描二维码
下载博学谷APP扫描二维码
关注博学谷微信公众号
if…else是我们经常会使用的基础语法,但是在代码中如果存在过多的if…else,将会很大程度影响代码的可读性和可维护性。那么代码中if…else过多怎么办?本文为大家汇总了解决这个问题的五种方案,下面我们来逐一看看吧!
解决方案一:职责链模式
当 if...else 中的条件表达式灵活多变,无法将条件中的数据抽象为表格并用统一的方式进行判断时,这时应将对条件的判断权交给每个功能组件。并用链的形式将这些组件串联起来,形成完整的功能。代码演示:
public void handle(request) {
handlerA.handleRequest(request);
}
public abstract class Handler {
protected Handler next;
public abstract void handleRequest(Request request);
public void setNext(Handler next) { this.next = next; }
}
public class HandlerA extends Handler {
public void handleRequest(Request request) {
if (canHandle(request)) doHandle(request);
else if (next != null) next.handleRequest(request);
}
}
解决方案二:表驱动
对于逻辑表达模式固定的 if...else 代码,可以通过某种映射关系,将逻辑表达式用表格的方式表示;再使用表格查找的方式,找到某个输入所对应的处理函数,使用这个处理函数进行运算。代码演示:
Map<?, Function<?> action> actionMappings = new HashMap<>(); // 这里泛型 ? 是为方便演示,实际可替换为你需要的类型
// When init
actionMappings.put(value1, (someParams) -> { doAction1(someParams)});
actionMappings.put(value2, (someParams) -> { doAction2(someParams)});
actionMappings.put(value3, (someParams) -> { doAction3(someParams)});
// 省略 null 判断
actionMappings.get(param).apply(someParams);
解决方案三:Optional
Java 代码中的一部分 if...else 是由非空检查导致的。因此,降低这部分带来的 if...else 也就能降低整体的 if...else 的个数。Java 从 8 开始引入了 Optional 类,用于表示可能为空的对象。这个类提供了很多方法,用于相关的操作,可以用于消除 if...else。开源框架 Guava 和 Scala 语言也提供了类似的功能。代码演示:
Optional<String> strOptional = Optional.of("Hello World!");
strOptional.ifPresentOrElse(System.out::println, () -> System.out.println("Null"));
解决方案四:注解驱动
通过 Java 注解(或其它语言的类似机制)定义执行某个方法的条件。在程序执行时,通过对比入参与注解中定义的条件是否匹配,再决定是否调用此方法。具体实现时,可以采用表驱动或职责链的方式实现。
很多框架中都能看到这种模式的使用,比如常见的 Spring MVC。因为这些框架很常用,demo 随处可见,所以这里不再展示具体的演示代码了。这个模式的重点在于实现。现有的框架都是用于实现某一特定领域的功能,例如 MVC。故业务系统如采用此模式需自行实现相关核心功能。主要会涉及反射、职责链等技术。具体的实现这里就不做演示了。
解决方案五:多态
使用面向对象的多态,也可以起到消除 if...else 的作用。链接中给出的示例比较简单,无法体现适合使用多态消除 if...else 的具体场景。一般来说,当一个类中的多个方法都有类似于示例中的 if...else 判断,且条件相同,那就可以考虑使用多态的方式消除 if...else。同时,使用多态也不是彻底消除 if...else。而是将 if...else 合并转移到了对象的创建阶段。在创建阶段的 if..,我们可以使用前面介绍的方法处理。
代码中if…else过多怎么办?相信上面汇总的五种解决方案,已经可以帮助大家应付各种各样的情形。当然如果大家在实际工作终于到,还需要自己思考应该采用什么方案比较合适具体的实际情况。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
IT行业35岁后的职业规划建议
对于每一个IT人来说,35岁后是一个需要认真考虑职业发展前途的新阶段。到了这个阶段,大家也不必过于焦虑,虽然随着年纪的增长,30多岁的程序员在体力和工作效率上,可能会比不上年轻的新人,但是经验的积累对于IT人来讲,也是一笔宝贵的财富。本文就和大家一起来探讨下,IT行业35岁后的职业发展应该如何规划。
10782
2019-10-31 15:07:12
IT程序员怎样实现财富自由?技术是核心竞争力
IT程序员怎样实现财富自由?程序员100%的脑力工作者,但很多人把自己变成体力工作者,自己身处劳动密集型产业,有的人甚至以日产出几千行代码为傲。程序员不是简单会敲代码就行,构思、设计、编码、测试、调试,往往编码只占很小的比例。
5286
2020-03-26 15:47:03
新手入门编程需要具备哪些素质?
在新手入门编程之前,作为过来人小编想给大家一些关于学习编程的建议。很多零基础非计算机科班出身的初学者担心自己学不好编程,其实这种担心完全是多余的,学习编程就和学习一门外语是一样的,即使现在你还是零,在经过了一段时间的努力学习之后,也能成功掌握编程语言。那么有人可能要问了,新手入门编程需要具备哪些素质呢?或者换句话说,在学习编程的过程中哪些素质会帮助我们更好更快的掌握一门编程语言呢?
5025
2020-04-22 17:16:50
当了几年程序员后,他竟然选择转行到这个行业......
众所周知,提到程序员大家的第一反应就是高薪的代表,程序员作为互联网从业者的一员,常以高薪出现在人们的视野中,但在这光鲜亮丽的背后,高强度的工作压力、熬夜加班也成了家常便饭,很大程度上会影响身心健康,很多人想着寻找新的工作出路。
4198
2021-09-27 17:52:51
未来互联网人才还稀缺吗?哪些技术方向热门?
未来互联网人才还稀缺吗?哪些技术方向热门?人才是最稀缺的资源,是实现百年卓越海亮的最关键要素,很多公司对专业人才的需求非常大,顶尖人才可以给公司带来很长远的收益。随着社会的不断发展越来越多的新职业也是不断的出现,随着社会的分工以及发展也会出现很多的紧缺的职业。
3211
2022-06-27 17:22:58