189 8069 5689

如何解决代码中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 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 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过多的问题的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


当前标题:如何解决代码中if…else过多的问题
网页URL:http://cdxtjz.cn/article/pdijgc.html

其他资讯