精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

天天综合网天天综合色| 午夜伦理在线| 亚洲三级毛片| 亚洲欧美成人网| 亚洲午夜精品一区| 国产网站在线| 欧美国产成人在线| 91视频九色网站| 波多野结衣视频网站| 91日韩在线| 亚洲精品一区二区在线| 三日本三级少妇三级99| 中文字幕在线直播| 91网站黄www| 91影视免费在线观看| 日本一本高清视频| 91精品电影| 亚洲图片制服诱惑| 日韩av手机在线播放| 欧美日韩破处视频| 色综合天天狠狠| 国产视频在线观看网站| 日本中文字幕伦在线观看| 波多野结衣视频一区| 国产日韩在线免费| 波多野结衣激情视频| 亚洲欧洲日本一区二区三区| 爱福利视频一区| 天天躁日日躁aaaa视频| 国产精品主播在线观看| 日韩丝袜美女视频| 国内自拍视频一区| 国产激情在线| 国产精品每日更新在线播放网址 | 无码人妻av一区二区三区波多野| 国产精品jizz在线观看美国| 另类美女黄大片| 制服丨自拍丨欧美丨动漫丨| swag国产精品一区二区| 欧美精品777| 污污网站免费观看| 亚洲天堂一区二区| 色域天天综合网| 青青草原av在线播放| 爱搞国产精品| 五月天亚洲精品| 国产亚洲黄色片| 国产精品186在线观看在线播放| 亚洲美女在线一区| 国产对白在线播放| 欧美jizz18性欧美| 国产精品九色蝌蚪自拍| 日韩精品一区二区三区外面| 国产色在线 com| 国产午夜久久久久| 亚洲成人18| 91精品大全| 17c精品麻豆一区二区免费| 亚洲自拍三区| 思思99re6国产在线播放| 国产精品传媒在线| 美女黄色片网站| 色呦呦在线播放| 亚洲不卡在线观看| 日日摸日日碰夜夜爽无码| 亚洲资源一区| 亚洲成人综合视频| 50路60路老熟妇啪啪| 日韩成人av电影| 欧美日韩三级一区| 日韩欧美中文在线视频| 中文字幕一区图| 精品国产网站在线观看| 男生裸体视频网站| 国产一区不卡| 一区二区三区黄色| 国产大学生自拍| 亚洲九九精品| 国产精品久在线观看| 国产欧美熟妇另类久久久| 久久97超碰色| 国产亚洲精品久久飘花| 深夜福利在线视频| 中文在线免费一区三区高中清不卡| 视频一区视频二区视频| h片在线免费观看| 天天综合色天天综合色h| 国产成人精品无码播放| 成人在线爆射| 欧美一区二区三区思思人| 免费不卡的av| 99re66热这里只有精品8| 久久久久久国产三级电影| av一级在线观看| 国产精品资源在线观看| 国产一区二区无遮挡 | 一本大道久久加勒比香蕉| 久草福利资源在线| 亚洲高清二区| 日本成熟性欧美| 精品国产一级片| 国产亚洲精品精华液| 国产免费xxx| 粉嫩一区二区三区| 欧美精品一区二区三区在线播放 | 无码一区二区三区视频| 7777精品久久久久久| 亚洲天堂999| 97超碰欧美中文字幕| 天天综合五月天| 樱花草涩涩www在线播放| 欧美人狂配大交3d怪物一区| 日本黄色网址大全| 国产精品久久久久久久久久10秀 | 99视频这里有精品| 亚洲人在线观看| 人与动物性xxxx| 影音先锋日韩资源| 亚洲综合中文字幕68页| 青春草在线观看| 亚洲sss视频在线视频| 国产欧美一区二| 国产一区二区三区四区五区 | 在线观看成人av电影| 精品丝袜在线| 精品久久久久一区| 肉色超薄丝袜脚交69xx图片| 日韩高清一级片| 久久草.com| 黄色网址视频在线观看| 欧美日韩国产专区| 亚洲精品中文字幕在线播放| 欧美韩日精品| 成人免费网站在线观看| 97电影在线看视频| 欧亚一区二区三区| 亚洲精品国产精品国自| 三级成人在线视频| 免费h精品视频在线播放| a级片在线免费观看| 亚洲成人三级在线| 亚欧洲精品在线视频| 成人美女在线视频| 亚洲精品久久久久久久蜜桃臀| 久久福利在线| 日韩中文字幕视频| 懂色av蜜臀av粉嫩av喷吹| 国产日产精品一区| 永久免费看av| 国产精品99久久免费观看| 欧美国产视频一区二区| 丰满人妻一区二区三区四区53 | 久久久久久久久久久久久女国产乱| 男人添女荫道口图片| 成人精品动漫一区二区三区| 欧美激情视频网站| 少妇又色又爽又黄的视频| 亚洲乱码日产精品bd| 香蕉网在线视频| 红桃视频国产一区| 久久波多野结衣| 777午夜精品电影免费看| 在线日韩欧美视频| 国产在线视频99| 免费国产亚洲视频| 少妇熟女一区二区| 青草伊人久久| 97在线视频一区| 天堂av一区二区三区| 一区二区三区成人在线视频| 亚洲av无一区二区三区久久| 综合五月婷婷| 91av免费看| bt在线麻豆视频| 亚洲福利视频久久| 一级黄色在线观看| 中文字幕在线观看不卡| 潘金莲一级淫片aaaaa| 日韩一区二区免费看| 鲁丝片一区二区三区| 亚洲伦理网站| 韩国福利视频一区| 国产毛片在线看| 欧美老肥妇做.爰bbww| 免费中文字幕视频| 久久精品人人爽人人爽| 欧美在线a视频| 亚洲欧美大片| 裸体裸乳免费看| 午夜先锋成人动漫在线| 91亚洲精品久久久| 91福利在线尤物| 亚洲图片在区色| 蜜臀久久久久久999| 婷婷国产在线综合| av网在线播放| 东方aⅴ免费观看久久av| 久久精品免费一区二区| 成人激情在线| 国产精品毛片一区视频| 日韩一区二区三免费高清在线观看| 九九九久久久久久| 在线毛片网站| 亚洲精品国产精品久久清纯直播| 91精品国产综合久| 欧美性黄网官网| 亚洲怡红院在线观看| 久久综合久久99| 免费欧美一级片| 日本中文字幕一区二区视频| 激情深爱综合网| 日韩精品网站| 日本在线播放不卡| 欧美自拍一区| 国产区亚洲区欧美区| www.超碰在线| 欧美激情xxxx| 国产鲁鲁视频在线观看特色| 亚洲欧美国产日韩中文字幕| 欧美 日韩 国产 在线| 91精品福利在线一区二区三区| 男人日女人网站| 午夜精品久久久久久久久| 国产wwwwxxxx| 不卡一区中文字幕| 日本黄色www| 青青草国产成人av片免费| 分分操这里只有精品| 精品大片一区二区| 91青青草免费观看| 四虎国产精品永久在线国在线| 91精品国产91| 高清在线视频不卡| 性金发美女69hd大尺寸| 最新av在线播放| 欧美精品一区二区免费| 日本中文字幕在线视频| 日韩在线观看免费高清完整版| 免费动漫网站在线观看| 国产偷亚洲偷欧美偷精品 | 亚洲天堂网站在线观看视频| 国产毛片久久久久| 欧美精品久久一区二区三区| ,一级淫片a看免费| 欧美日韩在线综合| 亚洲在线免费观看视频| 欧美日韩亚洲国产综合| 亚洲综合免费视频| 欧美日韩精品一区二区三区 | 日本一区二区三区免费看| 人体久久天天| 成人自拍网站| 久久久久久毛片免费看 | 亚洲热在线视频| 久久99国产乱子伦精品免费| 天天综合成人网| 精品在线亚洲视频| 成人黄色一级大片| 久久国产精品第一页| 九九热免费在线观看| 国产高清在线观看免费不卡| 成人免费看片载| 成人动漫在线一区| www.久久国产| a级精品国产片在线观看| 中国美女乱淫免费看视频| 久久嫩草精品久久久精品一| 黑人巨大精品欧美| 国产精品你懂的| 日本黄色免费片| 亚洲精品水蜜桃| 日本熟伦人妇xxxx| 91官网在线观看| 国产精品高潮呻吟av| 91.com视频| 国产综合在线播放| 亚洲国产成人久久| 97最新国自产拍视频在线完整在线看| 色婷婷综合成人av| 欧美色18zzzzxxxxx| 亚洲美女激情视频| 日本激情在线观看| 久久久久久国产精品久久| 成年人在线网站| 欧美一区二区.| 国产亚洲精aa在线看| 精品九九九九| 91精品成人| 欧美 日韩精品| 欧美a级一区二区| 久久久久久婷婷| 中文字幕乱码亚洲精品一区| 久久伊人成人网| 欧美日韩一级二级三级| 色欲av永久无码精品无码蜜桃| 综合欧美国产视频二区| 国产美女高潮在线观看| 国产欧美日韩视频| 天堂资源在线亚洲| 欧美高清视频一区二区三区在线观看| 国产精品毛片一区二区在线看| 久青草视频在线播放| 免费高清在线视频一区·| 91人妻一区二区三区| 国产欧美一区二区精品婷婷| 国产无码精品视频| 欧美美女bb生活片| 日韩国产福利| 欧美精品在线观看| 四虎成人在线| 欧美精品二区三区四区免费看视频 | 欧美性爽视频| 国产精品美女www| 欧美1区二区| 日本高清xxxx| 麻豆精品视频在线观看免费 | 久久精品日韩一区二区三区| 日本一区二区不卡在线| 日韩一区二区在线免费观看| 国产小视频福利在线| 欧美日韩成人免费| 亚洲精品大全| 色噜噜狠狠色综合网| 亚洲女优在线| aaaaa一级片| 精品成人乱色一区二区| 蜜桃av中文字幕| 久精品免费视频| 欧美aaa大片视频一二区| 北条麻妃高清一区| 欧美三级网页| 国产高清av片| 伊人夜夜躁av伊人久久| 99精品国产99久久久久久97| 亚洲香蕉伊综合在人在线视看| 超碰99在线| 国产成人亚洲欧美| 国产精品伦理久久久久久| 亚洲图片 自拍偷拍| 中国av一区二区三区| 欧美在线视频精品| 在线视频欧美日韩精品| 国产成人免费精品| 欧美一卡2卡3卡4卡无卡免费观看水多多| 亚洲精品字幕| 久久av无码精品人妻系列试探| 欧美日韩国产中文精品字幕自在自线 | 国产亚洲成人av| 日韩美女主播在线视频一区二区三区| 亚洲精品承认| 亚洲一区二区三| 欧美成人久久| 久久精品女同亚洲女同13| 一区二区三区四区不卡在线| 亚洲av少妇一区二区在线观看| 欧美第一淫aaasss性| 成人午夜网址| 黄页网站大全在线观看| 91亚洲精品久久久蜜桃| 午夜精品久久久久久久久久久久久蜜桃| 精品丝袜一区二区三区| japanese23hdxxxx日韩| 亚洲一区不卡在线| 国产精品亚洲一区二区三区妖精| 久久久久成人网站| 日韩精品视频三区| 日本综合视频| 亚洲欧美日韩国产yyy| 另类人妖一区二区av| 日本aⅴ在线观看| 日韩av在线免费观看| 欧洲精品一区二区三区| 日韩电影天堂视频一区二区| 激情文学综合丁香| 日本系列第一页| 中文字幕不卡av| 精品一级视频| 日本在线观看一区二区三区| 日韩不卡在线观看日韩不卡视频| 91麻豆免费视频网站| 亚洲精品久久久久久久久久久久久| 电影天堂国产精品| 成人午夜视频免费观看| 97se亚洲国产综合自在线| 做爰视频毛片视频| 久久久久久亚洲精品中文字幕| 九九热爱视频精品视频| 伊人色在线观看| 精品国产乱码久久久久久天美| 91高清在线| 精品在线视频一区二区三区| 精品无人码麻豆乱码1区2区 | 一区二区在线中文字幕电影视频| 国产成人精品亚洲午夜麻豆| 青青国产在线视频| 日韩中文字幕网站| 国产另类在线| 99日在线视频| 黑丝美女久久久| 青春草视频在线观看|