如何 Java 中的大量的 if else 判断?

这篇具有很好参考价值的文章主要介绍了如何 Java 中的大量的 if else 判断?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

问题出现:

如何 Java 中的大量的 if else 判断?

解决方案:

   1.策略模式

    2.工厂模式

    3.映射表

   4.反射+配置文件------极力推荐使用!!!!!


问题出现:

如何 Java 中的大量的 if else 判断?

在编写Java相关程序时,我们经常遇到:

如何 Java 中的大量的 if else 判断?

 大量的 if  else 语句,无不让人内心疯狂,这都是些啥代码啊!!!!!!一点编程艺术的没有,简称:烂代码!

如果学习过设计模式,那应该没问题了。

解决方案:

在 Java 中,有多种方式可以避免大量的 if-else 判断。下面列举一些常用的方法和相关案例:

 

   1.策略模式

        策略模式是一种行为型设计模式,它通过定义一系列算法类(策略类),将算法的实现与使用分离开来,使得算法可以独立于使用它的客户端而变化。在 Java 中,策略模式通常被应用于业务逻辑中,用于处理不同的业务场景和业务规则。具体实现如下:

        首先,定义一个策略接口或抽象类,用于封装具体的算法:

public interface Strategy {
    void execute();
}

       然后,定义多个具体的策略类,实现该接口或抽象类:

public class ConcreteStrategyA implements Strategy {
    @Override
    public void execute() {
        // 实现具体的算法 A
    }
}

public class ConcreteStrategyB implements Strategy {
    @Override
    public void execute() {
        // 实现具体的算法 B
    }
}

public class ConcreteStrategyC implements Strategy {
    @Override
    public void execute() {
        // 实现具体的算法 C
    }
}

        接着,定义一个上下文类,用于管理所有的策略:

public class Context {
    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public void executeStrategy() {
        strategy.execute();
    }
}

         最后,在客户端中,根据业务需要,传入相应的策略对象,执行对应的算法:

Strategy strategy = new ConcreteStrategyA(); // or new ConcreteStrategyB() 或者new ConcreteStrategyC()
Context context = new Context(strategy);
context.executeStrategy();

 

    2.工厂模式

       工厂模式是一种创建型设计模式,它通过定义一个工厂类来封装对象的创建过程,从而将客户端代码与具体的产品实现解耦。在 Java 中,工厂模式通常被应用于对象的创建和组装场景中。具体实现如下:

      首先,定义一个产品接口或抽象类,用于封装产品的通用接口或抽象父类:

public interface Product {
    void method();
}

        然后,定义多个具体的产品类,实现该接口或抽象父类:

public class ConcreteProductA implements Product {
    @Override
    public void method() {
        // 实现具体的产品 A 的方法
    }
}

public class ConcreteProductB implements Product {
    @Override
    public void method() {
        // 实现具体的产品 B 的方法
    }
}

public class ConcreteProductC implements Product {
    @Override
    public void method() {
        // 实现具体的产品 C 的方法
    }
}

        接着,定义一个工厂类,用于创建产品对象:

public class Factory {
    public static Product create(String type) {
        switch (type) {
            case "A":
                return new ConcreteProductA();
            case "B":
                return new ConcreteProductB();
            case "C":
                return new ConcreteProductC();
            default:
                throw new IllegalArgumentException("Invalid type: " + type);
        }
    }
}

        最后,在客户端中,调用工厂类的静态方法,创建对应的产品对象:

Product product = Factory.create("A"); // or Factory.create("B") 或者Factory.create("C")
product.method();

 

    3.映射表

        映射表是一种基于哈希表实现的数据结构,它可以将多个条件值(如字符串或枚举值)映射到对应的处理函数上。在 Java 中,通过使用 Map 数据结构,可以很方便地实现映射表。具体实现如下:

        首先,创建一个 Map 对象,用于存储条件值和处理函数之间的映射关系:

Map<String, Runnable> map = new HashMap<>();

        然后,将每个条件值和对应的处理函数注册到 Map 中:

map.put("value1", () -> {
    // 处理 value1 条件的逻辑
});

map.put("value2", () -> {
    // 处理 value2 条件的逻辑
});

// ...

        最后,在客户端中,根据需要执行对应的处理函数:

String condition = "value1"; // or "value2" 或者其他条件值
Runnable handler = map.get(condition);
if (handler != null) {
    handler.run();
} else {
    throw new IllegalArgumentException("Unsupported condition: " + condition);
}

   4.反射+配置文件------极力推荐使用!!!!!

可以看看这个:http://t.csdn.cn/XJIpu 

不知道反射?看这:-----》》》http://t.csdn.cn/5sbcp

  • 在 Java 中,if-else 语句通常用来处理不同的条件分支。虽然 if-else 语句很好用,但如果有大量的 if-else 分支,会降低程序的可读性、可维护性和可扩展性。当需要添加或删除某个条件分支时,需要修改相应的代码,这样容易引入新的错误或导致不必要的耦合。为了避免这些问题,可以使用反射和配置文件来解决大量的 if-else 判断。
  • 反射是一种在运行时获取类信息和类实例,并通过这些信息和实例来调用类的方法或操作其属性的机制。Java 提供了一组反射 API,可以在运行时获取类的结构信息、创建类的实例、访问类的属性、调用类的方法等。使用反射机制可以将程序的控制流程动态化,不再依赖于编译时确定的类型和方法,从而提高了程序的灵活性和可扩展性。
  • 配置文件是一种文本文件,用于保存程序的配置信息。Java 中的配置文件通常以 .properties 或 .xml 格式保存,其中 .properties 文件格式最简单,它由多个属性名和属性值组成,每个属性名和属性值之间使用等号(=)连接。使用配置文件可以将程序的配置信息从代码中分离出来,使得程序的配置更加灵活和易于管理。

使用反射和配置文件来避免大量的 if-else 判断的实现步骤如下:

 

--1.定义一个接口或抽象类,用于定义通用行为或方法。例如,定义一个接口 Action,用于执行某个动作:

public interface Action {
    void execute(String param1, String param2);
}

--2.定义多个实现该接口或抽象类的具体类,实现自己的业务逻辑。例如,定义两个实现类 ConcreteAction1 和 ConcreteAction2。

public class ConcreteAction1 implements Action {
    @Override
    public void execute(String param1, String param2) {
        // 处理 ConcreteAction1 业务逻辑
    }
}

public class ConcreteAction2 implements Action {
    @Override
    public void execute(String param1, String param2) {
        // 处理 ConcreteAction2 业务逻辑
    }
}

--3.将每个具体类的信息(包括类名、参数等)保存到配置文件中。例如,将上述两个类的信息保存到 config.properties 文件中。

action.1=com.example.ConcreteAction1
action.2=com.example.ConcreteAction2

--4.在程序启动时,读取配置文件,并通过反射机制创建具体类的实例。例如,读取 config.properties 文件中的属性,并创建 ConcreteAction1 的实例。

Properties props = new Properties();
try (InputStream stream = getClass().getResourceAsStream("config.properties")) {
    props.load(stream);
}

String actionName = props.getProperty("action.1"); // 具体类的类名
Class<?> actionClass = Class.forName(actionName);
Action action = (Action) actionClass.getDeclaredConstructor().newInstance(); // 创建具体类的实例

--5.在程序运行时,通过 Action 接口调用具体类的方法。例如,执行 ConcreteAction1 的 execute 方法,并传入参数。

action.execute("param1", "param2");

        使用反射和配置文件来避免大量的 if-else 判断可以将程序的控制流程动态化,从而提高了程序的灵活性和可扩展性。当需要添加或删除某个条件分支时,只需要修改配置文件,而不需要修改代码。使用这种方式还可以将程序的配置信息和业务逻辑分离开来,使得程序更加易于管理和维护。文章来源地址https://www.toymoban.com/news/detail-497093.html

到了这里,关于如何 Java 中的大量的 if else 判断?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《人生苦短——我学Python》条件判断->双向选择(if--else)

    今天我们来学习双向选择判断。顾名思义,双向就是两种选择选其一,即 if----else 。如果If的条件不成立,则执行 else 下的语句,否则执行 if 下面的语句。显然,它们是 互斥 的!下面就让我们来详细看看吧! if 后面的语句是当判断 条件成立 时, 需要执行 的操作。 else 后面

    2024年02月10日
    浏览(27)
  • 【Python入门】Python的判断语句(if elif else语句)

    前言 📕作者简介: 热爱跑步的恒川 ,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于Python零基础入门系列,本专栏主要内容为Python基础语法、判断、循环语句、函数、函数进阶、数据容器、文件操作、异常模块与包、数据可视化等,

    2024年02月04日
    浏览(38)
  • 【Python入门篇】——Python中判断语句(if elif else语句,判断语句的嵌套与实战案例)

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: Python入门,本专栏主要内容为Python的基础语法,Python中的选择循环语句,Python函数,Python的数据容器等。 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 某些场景下,判断

    2024年02月04日
    浏览(35)
  • 【自学Java】Java if else-if else语句

    在 Java 语言 中, if 是用于测试某个条件( 布尔型 或逻辑型)的语句是否满足一定的条件,如果满足特定的条件,则会执行 if 后由大括号 {} 括起来的代码块,否则就忽略该代码块继续执行后续的代码。 else if 用于在 if 语句条件不满足的情况下,继续执行 else

    2024年02月06日
    浏览(40)
  • 策略模式解决if-else问题

    释义: 策略模式是一种行为设计模式,它允许在运行时根据不同的情况来选择不同的策略。 这种模式支持开闭原则,在不修改现有代码的前提下,动态的添加、删除、替换算法。 组成部分: 策略接口(Strategy) :它是一个接口,具体的策略实现类去实现这个接口,就可以提供

    2024年02月03日
    浏览(27)
  • mybatis使用xml中的if-else/choose

    最近需要使用 xml 文件来实现一些增删改查,此文对 其中的 if-else 加以说明 背景: 有一个引用类,假设叫 Student 现在我们查询条件也被封装成一个引用类,例如: 那么使用 xml 怎么来使用和接收呢? 首先肯定是在 mapper 里面有一个方法 然后在 xml 文件中写这个方法的具体实

    2024年04月23日
    浏览(25)
  • react自定义组件间的传值,if..else..判断,for循环(嵌套map使用),点击事件(Onclick),页面上事件实事传递参数(基础版)

    9.自定义组件间的传值 10.if..else..判断 11.for循环(嵌套map使用) 12.点击事件(Onclick) 13.页面上事件实事传递参数 14.关于export default function App()与export function App()的区别    export default不需要{}      import  Gallery from \\\'./Gallery.js\\\';    export function需要{}       import {Gallery} from \\\'./Galler

    2024年01月17日
    浏览(30)
  • Java(三)逻辑控制(if....else,循环语句)与方法

    1.1表达格式(三种) 小括号里面进行判断条件是否符合,正确执行语句 在小括号里面进行条件判断,正确执行语句1,错误执行语句2 表达式1正确,执行语句1,诺表达式1不正确, 则去判断表达式2是否正确,正确则执行语句2, 表达式2不正确,则去语句3。 外入: 为了能将值

    2024年02月09日
    浏览(33)
  • springboot工厂模式解决if_else流程和问题点解决

    spring中的Bean由IOC容器进行管理,和普通工厂的区别就是springboot中的类不能通过自己New出来使用,如果通过new写入到工厂,涉及到相关实现类调用其他Service(该service在正确情况下正常注入),注入的Service也会报错异常Null,也就是工厂注入失败。 工厂中的相关Bean也通过Spring

    2023年04月09日
    浏览(55)
  • Java如何判断某文件目录是否存在

    在java中如何判断某文件所在的目录是否存在,若不存在创建目录 可以通过国使用 File 类的 getParentFile() 方法来获取文件所在的目录,并通过 exists() 方法来判断该目录是否存在,若不存在,通过 mkdirs() 方法创建目录,以下为实例 或直接简写

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包