精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

顛覆認知!我從 Spring 源碼里學到的一個隱藏高手級技巧

開發 前端
當你的代碼中開始出現 3 層以上的 ??if-else??,就是引入策略映射的最佳時機。它不只是設計模式里的教材,更是讓代碼結構清晰可擴展的“生產力工具”。

在日常開發中,我們經常會遇到這樣的場景:根據不同的條件分支執行不同的邏輯。最常見的寫法自然是大量的 if-else 或 switch-case 語句。這種寫法雖然直觀,但隨著業務復雜度提升,代碼的可讀性、可維護性會迅速下降,成為技術債的溫床。

最近我在閱讀 Spring Framework 源碼時,無意中發現它在多個核心模塊中大量使用了一種非常優雅的設計思路 —— 策略映射(Strategy Map),通過它,Spring 實現了對條件分支邏輯的解耦和模塊化。受到啟發后,我將其應用到自己的業務代碼中,效果立竿見影。

本文將通過一個實際案例帶你了解策略映射的使用方式,并展示如何結合注解與工廠模式自動注冊策略實現類,徹底擺脫臃腫邏輯。

場景背景:文件處理服務

我們假設有一個文件上傳處理服務,支持三種文件類型:CSV、JSON 和 XML。用戶上傳文件后,系統會根據文件類型調用不同的解析方法。

原始實現(if-else 地獄)

public void processFile(FileType fileType, InputStream inputStream) {
    if (fileType == FileType.CSV) {
        processCsv(inputStream);
    } else if (fileType == FileType.JSON) {
        processJson(inputStream);
    } else if (fileType == FileType.XML) {
        processXml(inputStream);
    } else {
        throw new IllegalArgumentException("Unsupported file type");
    }
}

問題顯而易見:

  • 職責不清:所有邏輯集中在一個方法中;
  • 擴展困難:增加新類型需改動已有代碼;
  • 測試繁瑣:不能獨立測試某種處理邏輯。

策略模式改寫

Step 1:定義文件類型枚舉

public enum FileType {
    CSV, JSON, XML
}

Step 2:定義統一接口

public interface FileProcessor {
    void process(InputStream inputStream);
}

方法一:基本策略映射(初級)

我們可以用 Spring 自動注入 + 手動注冊策略類:

@Component
public class CsvFileProcessor implements FileProcessor {
    @Override
    public void process(InputStream inputStream) {
        // 解析 CSV
    }
}


@Component
public class JsonFileProcessor implements FileProcessor {
    @Override
    public void process(InputStream inputStream) {
        // 解析 JSON
    }
}

手動維護 Map<FileType, FileProcessor>

@Service
public class FileProcessingService {


    private final Map<FileType, FileProcessor> processorMap = new EnumMap<>(FileType.class);


    @Autowired
    public FileProcessingService(List<FileProcessor> processors) {
        for (FileProcessor processor : processors) {
            if (processor instanceof CsvFileProcessor) {
                processorMap.put(FileType.CSV, processor);
            } else if (processor instanceof JsonFileProcessor) {
                processorMap.put(FileType.JSON, processor);
            }
            // ...
        }
    }


    public void processFile(FileType fileType, InputStream inputStream) {
        FileProcessor processor = processorMap.get(fileType);
        if (processor == null) {
            throw new IllegalArgumentException("Unsupported file type: " + fileType);
        }
        processor.process(inputStream);
    }
}

雖然比 if-else 好一些,但仍需手動維護映射,擴展成本仍在。

方法二:注解式自動注冊(高級推薦)

目標:

讓每個處理器類用注解聲明其支持的文件類型,然后由統一的“策略工廠”自動注冊進映射容器,徹底做到零修改、自動發現、自動注冊

定義策略注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FileTypeHandler {
    FileType value();
}
修改處理器實現類
@Component
@FileTypeHandler(FileType.CSV)
public class CsvFileProcessor implements FileProcessor {
    @Override
    public void process(InputStream inputStream) {
        System.out.println("處理 CSV 文件");
    }
}


@Component
@FileTypeHandler(FileType.JSON)
public class JsonFileProcessor implements FileProcessor {
    @Override
    public void process(InputStream inputStream) {
        System.out.println("處理 JSON 文件");
    }
}
編寫策略工廠
@Component
public class FileProcessorFactory implements ApplicationContextAware {


    private final Map<FileType, FileProcessor> processorMap = new EnumMap<>(FileType.class);


    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        Map<String, FileProcessor> beans = applicationContext.getBeansOfType(FileProcessor.class);
        for (FileProcessor processor : beans.values()) {
            FileTypeHandler annotation = processor.getClass().getAnnotation(FileTypeHandler.class);
            if (annotation != null) {
                processorMap.put(annotation.value(), processor);
            }
        }
    }


    public FileProcessor getProcessor(FileType type) {
        FileProcessor processor = processorMap.get(type);
        if (processor == null) {
            throw new IllegalArgumentException("未支持的文件類型: " + type);
        }
        return processor;
    }
}
服務類調用更簡潔
@Service
public class FileProcessingService {


    private final FileProcessorFactory factory;


    @Autowired
    public FileProcessingService(FileProcessorFactory factory) {
        this.factory = factory;
    }


    public void processFile(FileType type, InputStream inputStream) {
        factory.getProcessor(type).process(inputStream);
    }
}

總結:策略映射的進階之道

實現方式

可擴展性

可讀性

解耦程度

推薦程度

if-else/switch-case

耦合嚴重

 不推薦

手動構建 Map

一般

部分解耦

 可用

注解 + 工廠自動注冊

完全解耦

 強烈推薦

策略映射 + 注解注冊,是應對多分支邏輯的一種現代、模塊化、可維護的架構方式。Spring 中諸如 HandlerAdapterConverterMessageConverter 等核心機制大量應用了這一思路。

寫在最后

當你的代碼中開始出現 3 層以上的 if-else,就是引入策略映射的最佳時機。它不只是設計模式里的教材,更是讓代碼結構清晰可擴展的“生產力工具”。

與其維護一個千瘡百孔的 if 邏輯,不如優雅地構建一個策略工廠。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2020-04-03 09:45:09

Java多線程接口

2020-06-14 15:09:00

JavaScript開發技術

2022-03-21 10:21:50

jQuery代碼模式

2013-06-25 11:06:51

編程技巧蘋果

2022-03-27 09:06:04

React類型定義前端

2018-08-15 10:51:01

JavaSpring MVC框架

2015-06-29 13:47:19

創業創業智慧

2021-01-04 09:06:18

Next.js設計技巧

2024-04-15 12:54:00

ReactVue列表邏輯

2015-06-01 06:42:50

開源公司三大教訓

2011-07-11 10:34:40

編程技巧蘋果

2021-03-09 09:55:02

Vuejs前端代碼

2019-12-04 07:39:07

MySQL索引數據庫

2019-09-03 10:59:28

SQL索引語句

2021-04-15 08:15:27

Vue.js源碼方法

2013-06-27 10:31:39

2014-12-22 10:09:50

工程師

2021-05-14 05:18:36

Vite2issues項目

2023-11-14 11:18:13

2010-12-02 11:01:23

職場經驗
點贊
收藏

51CTO技術棧公眾號

www.日本不卡| 亚洲香蕉网站| 欧美日本一区二区三区四区| 国产高清免费在线| 亚洲va天堂va欧美ⅴa在线| 一区二区三区成人精品| 中文字幕日韩av电影| 超碰97在线播放| 国产亚洲精品码| 精品国内自产拍在线观看视频| 欧美区视频在线观看| 你真棒插曲来救救我在线观看| 极品白浆推特女神在线观看| 精品亚洲aⅴ乱码一区二区三区| 亚洲激情视频在线| 91热这里只有精品| 欧美伦理免费在线| 中文字幕二三区不卡| 成人av中文| 中文字幕777| 国产毛片一区二区三区| 欧美一区中文字幕| 人人爽人人av| av在线播放资源| 中文字幕在线不卡一区| 精品中文字幕一区| 中文字幕亚洲精品在线| 国产精品久久观看| 欧美人与性动xxxx| 日韩在线一级片| 直接在线观看的三级网址| 国产欧美日韩一区二区三区在线观看| 99re在线播放| 国产伦精品一区二区三区免.费| 久久综合激情| 韩日欧美一区二区| 国产精品三区在线观看| av永久不卡| 亚洲免费视频在线观看| 91人妻一区二区| 精品视频在线播放一区二区三区| 色素色在线综合| 少妇精品久久久久久久久久| 姝姝窝人体www聚色窝| 在线成人黄色| 免费av在线一区| av片在线免费看| 91精品亚洲一区在线观看| 色婷婷综合久久久中文字幕| 亚洲自偷自拍熟女另类| bbw在线视频| 亚洲风情在线资源站| 九色一区二区| 日韩在线视频免费| 成人av在线网| 国产日产精品一区二区三区四区| 国产高清在线观看视频| 国产乱码精品一区二区三区av| 91精品久久久久久久久久另类| 精品乱码一区内射人妻无码| 日本强好片久久久久久aaa| 国产成人精品视频在线| 国产午夜麻豆影院在线观看| 久久天堂成人| 国产成人精彩在线视频九色| 日本熟妇一区二区三区| 五月久久久综合一区二区小说| 在线电影欧美日韩一区二区私密| 自拍偷拍视频亚洲| 欧美三级伦理在线| 日韩一级裸体免费视频| 在线免费观看亚洲视频| 在线国产欧美| 国产成人精品午夜| 在线观看免费视频a| 激情五月播播久久久精品| 92国产精品视频| japanese国产| av中文字幕不卡| 欧美一区二区三区四区夜夜大片 | 免费一级肉体全黄毛片| 黄色成人精品网站| 正在播放国产一区| av最新在线观看| 欧美日韩亚洲国产精品| 国内免费久久久久久久久久久| 狠狠人妻久久久久久| 日韩1区2区3区| 亚洲a区在线视频| 欧美一级性视频| 国产偷国产偷精品高清尤物 | 欧美午夜免费影院| 2019中文字幕免费视频| www.久久网| 国产成人av影院| 蜜桃91精品入口| 丰满人妻av一区二区三区| av资源网一区| 亚洲免费在线精品一区| 手机亚洲第一页| 国产精品素人视频| av一区二区三区免费观看| 国产日本在线| 亚洲欧美电影一区二区| 日韩中文字幕在线免费| 精品欧美一区二区三区在线观看 | 狠狠色综合色区| 9191在线观看| 欧美极品少妇xxxxⅹ高跟鞋 | 欧美一区2区视频在线观看| 国产黑丝一区二区| 91久久高清国语自产拍| 91tv亚洲精品香蕉国产一区7ujn| 一级特黄色大片| www精品美女久久久tv| 少妇高潮大叫好爽喷水| 午夜在线免费观看视频| 亚洲va韩国va欧美va| 色婷婷一区二区三区av免费看| 噜噜噜天天躁狠狠躁夜夜精品| 在线观看国产精品91| 日本免费一二三区| 国产乱理伦片在线观看夜一区| 奇米视频888战线精品播放| 欧美人与牲禽动交com| 欧美情侣在线播放| 成熟人妻av无码专区| 99国内精品| 999久久久| 日本成a人片在线观看| 91国偷自产一区二区开放时间| 免费黄色a级片| 欧美日本一区| 91在线观看免费网站| 午夜视频在线免费观看| 91九色最新地址| www.自拍偷拍| 国产欧美不卡| 国产精品中出一区二区三区| 欧美人与禽性xxxxx杂性| 欧美一区二区啪啪| 男女做暖暖视频| 韩国av一区二区| 国产又大又长又粗又黄| 小说区图片区亚洲| 欧美xxxxx牲另类人与| 91传媒免费观看| 久久66热re国产| 亚洲一区二区三区欧美| 成人免费视频观看| 精品99一区二区| 国产 日韩 欧美 成人| 高清不卡在线观看| 性一交一乱一伧国产女士spa| 免费观看亚洲| 国产视频精品在线| 亚洲第一网站在线观看| 国产视频一区二区在线观看| 三级a在线观看| 日韩欧美视频在线播放| 国产日韩精品视频| 秋霞午夜在线观看| 日韩欧美一二三| 国产成人精品av久久| av不卡在线播放| 黄色a级片免费| 精品久久久亚洲| 国产一区视频在线播放| 综合久久2019| 亚洲黄色在线看| 欧美超碰在线观看| 国产精品色一区二区三区| 五月天丁香花婷婷| 激情自拍一区| 日韩午夜视频在线观看| aa亚洲一区一区三区| 久久久久久久成人| 毛片在线能看| 欧美一级高清片在线观看| 男人天堂av电影| 精品成人一区| 欧美高清一区二区| 99久久伊人| 欧美精品性视频| 午夜福利视频一区二区| 欧美日韩在线播放一区| 成人免费毛片东京热| 久久夜色精品国产噜噜av| 亚洲这里只有精品| 精品91久久久久| 欧洲亚洲一区| 亚洲视频精选| 国产成人aa精品一区在线播放| 91麻豆免费在线视频| 日韩激情在线视频| 国产乱码精品一区二区三区精东| 亚洲成av人片在线观看无码| 成人精品一二三区| 不卡视频在线观看| 亚洲欧美手机在线| 性色av一区二区怡红| 国产树林野战在线播放| 伊人成综合网伊人222| 成人自拍性视频| 成人性生交大片免费观看网站| 日韩视频在线免费观看| 午夜成人鲁丝片午夜精品| 欧美一级一区二区| 亚洲精品国产无码| 精品久久久久久久久久久| 国产老头老太做爰视频| 久久久久亚洲蜜桃| 黄色国产在线视频| 国产一区日韩二区欧美三区| 一区二区成人国产精品 | 国内精品久久久久影院薰衣草| 日本中文字幕网址| 欧美1区2区3区| 亚洲欧美日韩在线综合| 欧美有码在线| 成人av资源网| 狂野欧美xxxx韩国少妇| 国产热re99久久6国产精品| 乡村艳史在线观看| 孩xxxx性bbbb欧美| 污网站在线免费看| 久久久国产精品一区| 99国产精品久久久久久久成人| 色乱码一区二区三区88| 亚洲天堂日韩av| 在线日本高清免费不卡| 日韩欧美亚洲成人| 激情无码人妻又粗又大| 国产日韩欧美一区二区三区乱码| 亚洲精品国产成人av在线| 国产乱子伦视频一区二区三区| 欧美成人黄色网址| 天堂一区二区在线免费观看| 久久国产亚洲精品无码| 亚洲福利专区| 成人午夜精品久久久久久久蜜臀| 自拍欧美日韩| 男人天堂成人网| 91精品福利| 熟女视频一区二区三区| 五月激情久久久| 成人性做爰片免费视频| 亚洲乱码在线| 日本免费黄色小视频| 欧美~级网站不卡| 成人午夜免费剧场| 亚洲视频福利| 久久99久久99精品| 亚洲精品日韩久久| 激情综合在线观看| 天堂一区二区在线免费观看| 国产高清视频网站| 国内精品国产三级国产a久久| 欧美又黄又嫩大片a级| 亚洲人成人一区二区三区| bt天堂新版中文在线地址| 合欧美一区二区三区| 国产妇女馒头高清泬20p多| 亚洲人成免费| 国产性生交xxxxx免费| 免费观看成人鲁鲁鲁鲁鲁视频| 91极品视频在线观看| 狠狠色丁香久久婷婷综合丁香| 能看毛片的网站| 成人av免费在线观看| 90岁老太婆乱淫| 久久久综合网站| 成人精品一二三区| 亚洲制服欧美中文字幕中文字幕| 日韩免费在线视频观看| 色综合久久久久综合体| 一区二区视频网站| 欧美videos大乳护士334| 免费观看国产视频| 亚洲午夜未满十八勿入免费观看全集| 亚洲精品久久久久久久久久久久久久| 精品电影一区二区| 香蕉视频911| 中文字幕亚洲一区在线观看 | 九色丨蝌蚪丨成人| 日本在线一区| 中文字幕人成人乱码| 97国产在线播放| 久久国产精品免费| wwwxxx色| 国产欧美日韩另类一区| 麻豆国产尤物av尤物在线观看| 欧美性猛交xxx| 一区二区三区免费在线| 亚洲激情中文字幕| 日p在线观看| 日本人成精品视频在线| 精品视频在线观看网站| 欧美亚洲爱爱另类综合| 欧美精品二区| 91福利国产成人精品播放| 波波电影院一区二区三区| 国产wwwwxxxx| 色av一区二区| 理论片中文字幕| 日韩少妇与小伙激情| 天堂а√在线最新版中文在线| 91精品视频在线播放| 国产精品欧美三级在线观看| 日本熟妇人妻xxxx| 久久99这里只有精品| 亚洲av无码国产精品久久| 一区二区三区四区av| 亚洲一区中文字幕在线| 日韩精品高清在线| 中中文字幕av在线| 国产日韩欧美一二三区| 九一精品国产| 日本免费一区二区三区| 国语精品一区| 亚洲男人天堂2021| 欧美激情综合五月色丁香小说| 国产小视频在线免费观看 | 天堂在线中文资源| 欧美大片免费看| 91精品麻豆| 一区二区日本| 麻豆成人在线观看| 国产123在线| 91久久人澡人人添人人爽欧美| 天天爽夜夜爽夜夜爽| 性欧美办公室18xxxxhd| 91精品尤物| 狠狠精品干练久久久无码中文字幕| 美女视频黄a大片欧美| 国产成人一区二区在线观看| 欧美小视频在线观看| 天天色棕合合合合合合合| 午夜精品一区二区三区av| 欧美成人精品午夜一区二区| 国产a级片免费看| 九九**精品视频免费播放| 91无套直看片红桃在线观看| 欧美色手机在线观看| 亚洲精品承认| 91欧美激情另类亚洲| 亚洲深深色噜噜狠狠爱网站| 亚洲一级片av| 一区二区三区在线视频免费| 99热这里只有精品在线| 欧美老女人xx| 亚洲一区二区三区日本久久九| 2022中文字幕| 成人avav在线| 欧美 日韩 精品| 亚洲欧美一区二区激情| 亚洲天堂1区| 亚洲欧洲国产精品久久| 国内精品视频666| 久久99久久久| 亚洲精品狠狠操| 欧美xxx视频| 亚洲一区二区高清视频| 国产乱码精品一品二品| 国产一级理论片| 亚洲美女视频网站| 国产精品伊人| 水蜜桃在线免费观看| 成人精品视频一区| 91精品国产高清一区二区三密臀| 一个色综合导航| 99久热在线精品视频观看| 18黄暴禁片在线观看| 91色porny| 一级片视频网站| 久久99久久99精品中文字幕| 欧美顶级毛片在线播放| 天天操天天爱天天爽| 中文字幕日本乱码精品影院| 亚洲伦理在线观看| 国产成人97精品免费看片| 图片区亚洲欧美小说区| 国产精品嫩草av| 欧美日韩高清不卡| heyzo在线播放| 亚洲国产成人不卡| 大胆亚洲人体视频| 国产免费a视频| 欧美激情在线观看视频| 精品日本12videosex| 潘金莲一级淫片aaaaaaa| 色综合久久综合网欧美综合网| 激情影院在线观看| 精品国产一区二区三区麻豆免费观看完整版 | 在线看免费毛片| 黄网站色欧美视频| 久久精品视频观看| 久久一区二区三区av| 国产伦精品一区二区三区免费迷 | 日本亚洲天堂网|