最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 代碼中 if/switch 重構(gòu)方案的幾種實(shí)現(xiàn)

 更新時(shí)間:2026年01月25日 10:56:26   作者:一線大碼  
在Java開發(fā)中,想要避免出現(xiàn)大量 if...else 或 switch...case,可以使用多種設(shè)計(jì)模式和技巧來“消除條件分支”,下面總結(jié)幾種常用、實(shí)戰(zhàn)有效的方案

在 Java 開發(fā)中,想要避免出現(xiàn)大量 if...else 或 switch...case,可以使用多種設(shè)計(jì)模式和技巧來“消除條件分支”。下面總結(jié)幾種常用、實(shí)戰(zhàn)有效的方案。

1. 使用枚舉 + Lambda

適合一些輕量級(jí)邏輯分派。

package com.example.demo.enums;

import lombok.AllArgsConstructor;

import java.util.function.BiFunction;

@AllArgsConstructor
public enum OperationEnum {
    ADD((a, b) -> a + b),
    SUB((a, b) -> a - b),
    MUL((a, b) -> a * b),
    DIV((a, b) -> a / b);

    private final BiFunction<Integer, Integer, Integer> function;

    public int apply(int a, int b) {
        return function.apply(a, b);
    }
}

使用代碼,方法參數(shù)傳遞過來一個(gè)枚舉,直接調(diào)用 apply 方法就行:

public static void main(String[] args) {
    int result = operation(OperationEnum.MUL, 2, 3);
    System.out.println(result);
}

//這個(gè)方法減少了ifelse判斷
private static int operation(OperationEnum operationEnum, int a, int b) {
    return operationEnum.apply(a, b);
}

2. 使用枚舉 + Lambda + Map

適合簡(jiǎn)單分派邏輯。

package com.example.demo.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public enum ActionEnum {

    ACTION_A("A"),
    ACTION_B("B");

    private final String action;
}
package com.example.demo.handler;

import com.example.demo.enums.ActionEnum;

import java.util.HashMap;
import java.util.Map;

public class ActionHandler {
    private static final Map<String, Runnable> ACTION = new HashMap<>();

    static {
        ACTION.put(ActionEnum.ACTION_A.getAction(), () -> System.out.println("執(zhí)行邏輯 A"));
        ACTION.put(ActionEnum.ACTION_B.getAction(), () -> System.out.println("執(zhí)行邏輯 B"));
    }

    public static void execute(ActionEnum actionEnum) {
        ACTION.getOrDefault(actionEnum.getAction(), () -> System.out.println("默認(rèn)邏輯")).run();
    }
}

使用代碼:

ActionHandler.execute(ActionEnum.ACTION_A);

3. 使用責(zé)任鏈模式

適合逐步判斷、條件過濾的業(yè)務(wù),比如審批、數(shù)據(jù)校驗(yàn)??勺杂蓴U(kuò)展處理鏈,避免多層 if 嵌套。

首先提供一個(gè)抽象類,Request是個(gè)輔助類,可根據(jù)真實(shí)業(yè)務(wù)修改:

package com.example.demo.handler;

import lombok.Data;

@Data
public class Request {
    private boolean authenticated;
    private boolean validate;
}
package com.example.demo.handler;

import lombok.Setter;

public abstract class Handler {
    @Setter
    protected Handler next;

    public abstract void handle(Request request);
}

三個(gè)繼承抽象類的子類:

package com.example.demo.handler;

public class AuthHandler extends Handler {
    @Override
    public void handle(Request request) {
        if (request.isAuthenticated()) {
            System.out.println("login success");
            if (next != null) {
                next.handle(request);
            }
        } else {
            System.out.println("login fail");
        }
    }
}
package com.example.demo.handler;

public class ValidationHandler extends Handler{
    @Override
    public void handle(Request request) {
        if (request.isValidate()){
            System.out.println("validation success");
            if (next != null) {
                next.handle(request);
            }
        }else {
            System.out.println("validation failed");
        }
    }
}
package com.example.demo.handler;

public class BusinessHandler extends Handler {
    @Override
    public void handle(Request request) {
        System.out.println("start handler business");
    }
}

使用代碼:

Request request = new Request();
request.setAuthenticated(true);
request.setValidate(true);
AuthHandler authHandler = new AuthHandler();
ValidationHandler validationHandler = new ValidationHandler();
BusinessHandler businessHandler = new BusinessHandler();
//設(shè)置處理順序
authHandler.setNext(validationHandler);
validationHandler.setNext(businessHandler);
//開始觸發(fā)執(zhí)行
authHandler.handle(request);

執(zhí)行結(jié)果:

login success
validation success
start handler business

4. 使用策略模式

參考我的另一篇博文:SpringBoot 優(yōu)雅實(shí)現(xiàn)接口的多實(shí)現(xiàn)類方式

到此這篇關(guān)于Java 代碼中 if/switch 重構(gòu)方案的幾種實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java if/switch 重構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring Mvc配置xml使ResponseBody返回Json的方法示例

    spring Mvc配置xml使ResponseBody返回Json的方法示例

    這篇文章主要給大家介紹了關(guān)于spring Mvc配置xml使ResponseBody返回Json的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • Java 內(nèi)部類的定義與范例

    Java 內(nèi)部類的定義與范例

    說起內(nèi)部類這個(gè)詞,想必很多人都不陌生,但是又會(huì)覺得不熟悉。原因是平時(shí)編寫代碼時(shí)可能用到的場(chǎng)景不多,用得最多的是在有事件監(jiān)聽的情況下,并且即使用到也很少去總結(jié)內(nèi)部類的用法。今天我們就來一探究竟
    2021-11-11
  • @PathVariable和@RequestParam傳參為空問題及解決

    @PathVariable和@RequestParam傳參為空問題及解決

    這篇文章主要介紹了@PathVariable和@RequestParam傳參為空問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java多線程知識(shí)點(diǎn)全面總結(jié)

    Java多線程知識(shí)點(diǎn)全面總結(jié)

    這篇文章主要介紹了Java多線程知識(shí)點(diǎn)全面總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java設(shè)計(jì)模式—觀察者模式詳解

    Java設(shè)計(jì)模式—觀察者模式詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式—觀察者模式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • IDEA實(shí)現(xiàn)純java項(xiàng)目并打包jar的步驟(不使用Maven,Spring)

    IDEA實(shí)現(xiàn)純java項(xiàng)目并打包jar的步驟(不使用Maven,Spring)

    在Java開發(fā)中我們通常會(huì)將我們的項(xiàng)目打包成可執(zhí)行的Jar包,以便于在其他環(huán)境中部署和運(yùn)行,這篇文章主要介紹了IDEA實(shí)現(xiàn)純java項(xiàng)目并打包jar(不使用Maven,Spring)的相關(guān)資料,需要的朋友可以參考下
    2025-08-08
  • Java設(shè)計(jì)模式之裝飾者模式詳解

    Java設(shè)計(jì)模式之裝飾者模式詳解

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之裝飾者模式,裝飾者模式是一種結(jié)構(gòu)式模式,感興趣的朋友可以參考一下
    2021-10-10
  • Java8 新特性之日期時(shí)間對(duì)象及一些其他特性

    Java8 新特性之日期時(shí)間對(duì)象及一些其他特性

    這篇文章主要介紹了Java8 新特性之日期時(shí)間對(duì)象及一些其他特性,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Java之Spring注解配置bean實(shí)例代碼解析

    Java之Spring注解配置bean實(shí)例代碼解析

    這篇文章主要介紹了Java之Spring注解配置bean實(shí)例代碼解析,具有一定參考價(jià)值,文中還有有關(guān)Spring學(xué)習(xí)的資料下載鏈接及相關(guān)內(nèi)容推薦,需要的朋友可以了解下。
    2017-09-09
  • SpringBoot中如何使用Assert進(jìn)行斷言校驗(yàn)

    SpringBoot中如何使用Assert進(jìn)行斷言校驗(yàn)

    Java?提供了內(nèi)置的?assert?機(jī)制,而?Spring?框架也提供了更強(qiáng)大的?Assert?工具類來幫助開發(fā)者進(jìn)行參數(shù)校驗(yàn)和狀態(tài)檢查,下面我們就來看看SpringBoot中如何使用Assert進(jìn)行斷言校驗(yàn)吧
    2025-07-07

最新評(píng)論

女性| 阿克| 邵东县| 奎屯市| 南投市| 高州市| 济宁市| 马龙县| 宝清县| 珠海市| 古浪县| 雅安市| 天柱县| 遂昌县| 商河县| 桐乡市| 通辽市| 松江区| 平江县| 淮滨县| 咸阳市| 云霄县| 启东市| 荣昌县| 丰城市| 香港| 宿迁市| 洪洞县| 黑水县| 镇坪县| 宝山区| 治县。| 五河县| 镇坪县| 航空| 肥西县| 寻乌县| 连南| 喀喇| 扎鲁特旗| 吉安县|