国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

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

這篇具有很好參考價(jià)值的文章主要介紹了如何 Java 中的大量的 if else 判斷?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

問題出現(xiàn):

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

解決方案:

? ?1.策略模式

????2.工廠模式

? ? 3.映射表

? ?4.反射+配置文件------極力推薦使用?。。。?!


問題出現(xiàn):

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

在編寫Java相關(guān)程序時(shí),我們經(jīng)常遇到:

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

?大量的 if? else 語句,無不讓人內(nèi)心瘋狂,這都是些啥代碼?。。。。。?!一點(diǎn)編程藝術(shù)的沒有,簡(jiǎn)稱:爛代碼!

如果學(xué)習(xí)過設(shè)計(jì)模式,那應(yīng)該沒問題了。

解決方案:

在 Java 中,有多種方式可以避免大量的 if-else 判斷。下面列舉一些常用的方法和相關(guān)案例:

?

? ?1.策略模式

? ? ? ? 策略模式是一種行為型設(shè)計(jì)模式,它通過定義一系列算法類(策略類),將算法的實(shí)現(xiàn)與使用分離開來,使得算法可以獨(dú)立于使用它的客戶端而變化。在 Java 中,策略模式通常被應(yīng)用于業(yè)務(wù)邏輯中,用于處理不同的業(yè)務(wù)場(chǎng)景和業(yè)務(wù)規(guī)則。具體實(shí)現(xiàn)如下:

? ? ? ? 首先,定義一個(gè)策略接口或抽象類,用于封裝具體的算法:

public interface Strategy {
    void execute();
}

? ? ? ?然后,定義多個(gè)具體的策略類,實(shí)現(xiàn)該接口或抽象類:

public class ConcreteStrategyA implements Strategy {
    @Override
    public void execute() {
        // 實(shí)現(xiàn)具體的算法 A
    }
}

public class ConcreteStrategyB implements Strategy {
    @Override
    public void execute() {
        // 實(shí)現(xiàn)具體的算法 B
    }
}

public class ConcreteStrategyC implements Strategy {
    @Override
    public void execute() {
        // 實(shí)現(xiàn)具體的算法 C
    }
}

? ? ? ? 接著,定義一個(gè)上下文類,用于管理所有的策略:

public class Context {
    private Strategy strategy;

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

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

?????????最后,在客戶端中,根據(jù)業(yè)務(wù)需要,傳入相應(yīng)的策略對(duì)象,執(zhí)行對(duì)應(yīng)的算法:

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

?

????2.工廠模式

? ? ? ?工廠模式是一種創(chuàng)建型設(shè)計(jì)模式,它通過定義一個(gè)工廠類來封裝對(duì)象的創(chuàng)建過程,從而將客戶端代碼與具體的產(chǎn)品實(shí)現(xiàn)解耦。在 Java 中,工廠模式通常被應(yīng)用于對(duì)象的創(chuàng)建和組裝場(chǎng)景中。具體實(shí)現(xiàn)如下:

??????首先,定義一個(gè)產(chǎn)品接口或抽象類,用于封裝產(chǎn)品的通用接口或抽象父類:

public interface Product {
    void method();
}

????????然后,定義多個(gè)具體的產(chǎn)品類,實(shí)現(xiàn)該接口或抽象父類:

public class ConcreteProductA implements Product {
    @Override
    public void method() {
        // 實(shí)現(xiàn)具體的產(chǎn)品 A 的方法
    }
}

public class ConcreteProductB implements Product {
    @Override
    public void method() {
        // 實(shí)現(xiàn)具體的產(chǎn)品 B 的方法
    }
}

public class ConcreteProductC implements Product {
    @Override
    public void method() {
        // 實(shí)現(xiàn)具體的產(chǎn)品 C 的方法
    }
}

????????接著,定義一個(gè)工廠類,用于創(chuàng)建產(chǎn)品對(duì)象:

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);
        }
    }
}

????????最后,在客戶端中,調(diào)用工廠類的靜態(tài)方法,創(chuàng)建對(duì)應(yīng)的產(chǎn)品對(duì)象:

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

?

? ? 3.映射表

????????映射表是一種基于哈希表實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu),它可以將多個(gè)條件值(如字符串或枚舉值)映射到對(duì)應(yīng)的處理函數(shù)上。在 Java 中,通過使用 Map 數(shù)據(jù)結(jié)構(gòu),可以很方便地實(shí)現(xiàn)映射表。具體實(shí)現(xiàn)如下:

????????首先,創(chuàng)建一個(gè) Map 對(duì)象,用于存儲(chǔ)條件值和處理函數(shù)之間的映射關(guān)系:

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

????????然后,將每個(gè)條件值和對(duì)應(yīng)的處理函數(shù)注冊(cè)到 Map 中:

map.put("value1", () -> {
    // 處理 value1 條件的邏輯
});

map.put("value2", () -> {
    // 處理 value2 條件的邏輯
});

// ...

????????最后,在客戶端中,根據(jù)需要執(zhí)行對(duì)應(yīng)的處理函數(shù):

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

? ?4.反射+配置文件------極力推薦使用?。。。?!

可以看看這個(gè):http://t.csdn.cn/XJIpu?

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

  • 在 Java 中,if-else 語句通常用來處理不同的條件分支。雖然 if-else 語句很好用,但如果有大量的 if-else 分支,會(huì)降低程序的可讀性、可維護(hù)性和可擴(kuò)展性。當(dāng)需要添加或刪除某個(gè)條件分支時(shí),需要修改相應(yīng)的代碼,這樣容易引入新的錯(cuò)誤或?qū)е虏槐匾鸟詈稀榱吮苊膺@些問題,可以使用反射和配置文件來解決大量的 if-else 判斷。
  • 反射是一種在運(yùn)行時(shí)獲取類信息和類實(shí)例,并通過這些信息和實(shí)例來調(diào)用類的方法或操作其屬性的機(jī)制。Java 提供了一組反射 API,可以在運(yùn)行時(shí)獲取類的結(jié)構(gòu)信息、創(chuàng)建類的實(shí)例、訪問類的屬性、調(diào)用類的方法等。使用反射機(jī)制可以將程序的控制流程動(dòng)態(tài)化,不再依賴于編譯時(shí)確定的類型和方法,從而提高了程序的靈活性和可擴(kuò)展性。
  • 配置文件是一種文本文件,用于保存程序的配置信息。Java 中的配置文件通常以 .properties 或 .xml 格式保存,其中 .properties 文件格式最簡(jiǎn)單,它由多個(gè)屬性名和屬性值組成,每個(gè)屬性名和屬性值之間使用等號(hào)(=)連接。使用配置文件可以將程序的配置信息從代碼中分離出來,使得程序的配置更加靈活和易于管理。

使用反射和配置文件來避免大量的 if-else 判斷的實(shí)現(xiàn)步驟如下:

?

--1.定義一個(gè)接口或抽象類,用于定義通用行為或方法。例如,定義一個(gè)接口 Action,用于執(zhí)行某個(gè)動(dòng)作:

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

--2.定義多個(gè)實(shí)現(xiàn)該接口或抽象類的具體類,實(shí)現(xiàn)自己的業(yè)務(wù)邏輯。例如,定義兩個(gè)實(shí)現(xiàn)類 ConcreteAction1 和 ConcreteAction2。

public class ConcreteAction1 implements Action {
    @Override
    public void execute(String param1, String param2) {
        // 處理 ConcreteAction1 業(yè)務(wù)邏輯
    }
}

public class ConcreteAction2 implements Action {
    @Override
    public void execute(String param1, String param2) {
        // 處理 ConcreteAction2 業(yè)務(wù)邏輯
    }
}

--3.將每個(gè)具體類的信息(包括類名、參數(shù)等)保存到配置文件中。例如,將上述兩個(gè)類的信息保存到 config.properties 文件中。

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

--4.在程序啟動(dòng)時(shí),讀取配置文件,并通過反射機(jī)制創(chuàng)建具體類的實(shí)例。例如,讀取 config.properties 文件中的屬性,并創(chuàng)建 ConcreteAction1 的實(shí)例。

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(); // 創(chuàng)建具體類的實(shí)例

--5.在程序運(yùn)行時(shí),通過 Action 接口調(diào)用具體類的方法。例如,執(zhí)行 ConcreteAction1 的 execute 方法,并傳入?yún)?shù)。

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

????????使用反射和配置文件來避免大量的 if-else 判斷可以將程序的控制流程動(dòng)態(tài)化,從而提高了程序的靈活性和可擴(kuò)展性。當(dāng)需要添加或刪除某個(gè)條件分支時(shí),只需要修改配置文件,而不需要修改代碼。使用這種方式還可以將程序的配置信息和業(yè)務(wù)邏輯分離開來,使得程序更加易于管理和維護(hù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-497093.html

到了這里,關(guān)于如何 Java 中的大量的 if else 判斷?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 《人生苦短——我學(xué)Python》條件判斷->雙向選擇(if--else)

    《人生苦短——我學(xué)Python》條件判斷->雙向選擇(if--else)

    今天我們來學(xué)習(xí)雙向選擇判斷。顧名思義,雙向就是兩種選擇選其一,即 if----else 。如果If的條件不成立,則執(zhí)行 else 下的語句,否則執(zhí)行 if 下面的語句。顯然,它們是 互斥 的!下面就讓我們來詳細(xì)看看吧! if 后面的語句是當(dāng)判斷 條件成立 時(shí), 需要執(zhí)行 的操作。 else 后面

    2024年02月10日
    瀏覽(44)
  • 【Python入門】Python的判斷語句(if elif else語句)

    【Python入門】Python的判斷語句(if elif else語句)

    前言 ??作者簡(jiǎn)介: 熱愛跑步的恒川 ,致力于C/C++、Java、Python等多編程語言,熱愛跑步,喜愛音樂的一位博主。 ??本文收錄于Python零基礎(chǔ)入門系列,本專欄主要內(nèi)容為Python基礎(chǔ)語法、判斷、循環(huán)語句、函數(shù)、函數(shù)進(jìn)階、數(shù)據(jù)容器、文件操作、異常模塊與包、數(shù)據(jù)可視化等,

    2024年02月04日
    瀏覽(18)
  • 【Python入門篇】——Python中判斷語句(if elif else語句,判斷語句的嵌套與實(shí)戰(zhàn)案例)

    【Python入門篇】——Python中判斷語句(if elif else語句,判斷語句的嵌套與實(shí)戰(zhàn)案例)

    作者簡(jiǎn)介: 辭七七,目前大一,正在學(xué)習(xí)C/C++,Java,Python等 作者主頁: 七七的個(gè)人主頁 文章收錄專欄: Python入門,本專欄主要內(nèi)容為Python的基礎(chǔ)語法,Python中的選擇循環(huán)語句,Python函數(shù),Python的數(shù)據(jù)容器等。 歡迎大家點(diǎn)贊 ?? 收藏 ? 加關(guān)注哦!???? 某些場(chǎng)景下,判斷

    2024年02月04日
    瀏覽(23)
  • 【自學(xué)Java】Java if else-if else語句

    【自學(xué)Java】Java if else-if else語句

    在 Java 語言 中, if 是用于測(cè)試某個(gè)條件( 布爾型 或邏輯型)的語句是否滿足一定的條件,如果滿足特定的條件,則會(huì)執(zhí)行 if 后由大括號(hào) {} 括起來的代碼塊,否則就忽略該代碼塊繼續(xù)執(zhí)行后續(xù)的代碼。 else if 用于在 if 語句條件不滿足的情況下,繼續(xù)執(zhí)行 else

    2024年02月06日
    瀏覽(23)
  • 策略模式解決if-else問題

    策略模式解決if-else問題

    釋義: 策略模式是一種行為設(shè)計(jì)模式,它允許在運(yùn)行時(shí)根據(jù)不同的情況來選擇不同的策略。 這種模式支持開閉原則,在不修改現(xiàn)有代碼的前提下,動(dòng)態(tài)的添加、刪除、替換算法。 組成部分: 策略接口(Strategy) :它是一個(gè)接口,具體的策略實(shí)現(xiàn)類去實(shí)現(xiàn)這個(gè)接口,就可以提供

    2024年02月03日
    瀏覽(21)
  • mybatis使用xml中的if-else/choose

    最近需要使用 xml 文件來實(shí)現(xiàn)一些增刪改查,此文對(duì) 其中的 if-else 加以說明 背景: 有一個(gè)引用類,假設(shè)叫 Student 現(xiàn)在我們查詢條件也被封裝成一個(gè)引用類,例如: 那么使用 xml 怎么來使用和接收呢? 首先肯定是在 mapper 里面有一個(gè)方法 然后在 xml 文件中寫這個(gè)方法的具體實(shí)

    2024年04月23日
    瀏覽(20)
  • react自定義組件間的傳值,if..else..判斷,for循環(huán)(嵌套map使用),點(diǎn)擊事件(Onclick),頁面上事件實(shí)事傳遞參數(shù)(基礎(chǔ)版)

    9.自定義組件間的傳值 10.if..else..判斷 11.for循環(huán)(嵌套map使用) 12.點(diǎn)擊事件(Onclick) 13.頁面上事件實(shí)事傳遞參數(shù) 14.關(guān)于export default function App()與export function App()的區(qū)別 ? ?export default不需要{} ? ? ?import ?Gallery from \\\'./Gallery.js\\\'; ? ?export function需要{} ? ? ? import {Gallery} from \\\'./Galler

    2024年01月17日
    瀏覽(29)
  • Java(三)邏輯控制(if....else,循環(huán)語句)與方法

    Java(三)邏輯控制(if....else,循環(huán)語句)與方法

    1.1表達(dá)格式(三種) 小括號(hào)里面進(jìn)行判斷條件是否符合,正確執(zhí)行語句 在小括號(hào)里面進(jìn)行條件判斷,正確執(zhí)行語句1,錯(cuò)誤執(zhí)行語句2 表達(dá)式1正確,執(zhí)行語句1,諾表達(dá)式1不正確, 則去判斷表達(dá)式2是否正確,正確則執(zhí)行語句2, 表達(dá)式2不正確,則去語句3。 外入: 為了能將值

    2024年02月09日
    瀏覽(28)
  • springboot工廠模式解決if_else流程和問題點(diǎn)解決

    spring中的Bean由IOC容器進(jìn)行管理,和普通工廠的區(qū)別就是springboot中的類不能通過自己New出來使用,如果通過new寫入到工廠,涉及到相關(guān)實(shí)現(xiàn)類調(diào)用其他Service(該service在正確情況下正常注入),注入的Service也會(huì)報(bào)錯(cuò)異常Null,也就是工廠注入失敗。 工廠中的相關(guān)Bean也通過Spring

    2023年04月09日
    瀏覽(22)
  • Java如何判斷某文件目錄是否存在

    在java中如何判斷某文件所在的目錄是否存在,若不存在創(chuàng)建目錄 可以通過國(guó)使用 File 類的 getParentFile() 方法來獲取文件所在的目錄,并通過 exists() 方法來判斷該目錄是否存在,若不存在,通過 mkdirs() 方法創(chuàng)建目錄,以下為實(shí)例 或直接簡(jiǎn)寫

    2024年02月12日
    瀏覽(176)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包