策略模式實際用處,改吧改吧直接用,兩種方式

controller

@RestController
@RequestMapping("admin/test")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class TestController {@Autowiredprivate VideoFactory VideoFactory;@GetMapping("getList")public R getList(){// 第一種方式TestService testService = VideoFactory.chooseStrategy("2");System.out.println(testService.fetchVideo("1"));Test1Service testService1 = VideoFactory.chooseStrategy1("1");System.out.println(testService1.fetchVideo("dddd"));return R.ok().result(testService.fetchVideo("1"));// 第二種方式System.out.println(VideoServiceFactory.getService("1").fetchVideo("1"));}}

第一種方式

?策略工廠

@Component
public class VideoFactory implements InitializingBean {@Resourceprivate ApplicationContext applicationContext;private final Map<String, TestService> videoFactory = new ConcurrentHashMap<>();private final Map<String, Test1Service> videoFactory1 = new ConcurrentHashMap<>();public TestService chooseStrategy(String type) {return videoFactory.get(type);}public Test1Service chooseStrategy1(String type) {return videoFactory1.get(type);}@Overridepublic void afterPropertiesSet() throws Exception {Map<String, TestService> videoFactoryMap = applicationContext.getBeansOfType(TestService.class);videoFactoryMap.forEach((key, val) -> videoFactory.put(val.supports(), val));Map<String, Test1Service> videoFactory1Map = applicationContext.getBeansOfType(Test1Service.class);videoFactory1Map.forEach((key, val) -> videoFactory1.put(val.supports1(), val));}
}

service接口

public interface TestService {// 策略標識String supports();// 策略抽象接口String fetchVideo(String videoId);
}

TestService 實現類1

@Service
public class TestOneServiceImpl implements TestService{@Overridepublic String supports() {return "1";}@Overridepublic String fetchVideo(String videoId) {System.out.println("1111111111111111");return "第一個"+videoId;}
}

?TestService 實現類2

@Service
public class TestTwoServiceImpl implements TestService{@Overridepublic String supports() {return "2";}@Overridepublic String fetchVideo(String videoId) {System.out.println("22222222222222");return "第二個"+videoId;}
}

service1接口

public interface Test1Service {// 策略標識String supports1();// 策略抽象接口String fetchVideo1(String videoId);
}

?Test1Service?實現類1

@Service
public class TestOne1ServiceImpl implements Test1Service{@Overridepublic String supports1() {return "1";}@Overridepublic String fetchVideo1(String videoId) {System.out.println(videoId);return "最新的"+videoId;}
}

第二種方式

public class VideoServiceFactory {private static final Map<String, TestService> serviceMap = new HashMap<>();static {serviceMap.put("1", new TestOneServiceImpl());serviceMap.put("2", new TestTwoServiceImpl());}public static TestService getService(String ip) {return serviceMap.get(ip);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/899996.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899996.shtml
英文地址,請注明出處:http://en.pswp.cn/news/899996.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

chromium魔改——修改 navigator.webdriver 檢測

chromium源碼官網 https://source.chromium.org/chromium/chromium/src 說下修改的chromium源碼思路&#xff1a; 首先在修改源碼過檢測之前&#xff0c;我們要知道它是怎么檢測的&#xff0c;找到他通過哪個JS的API來做的檢測&#xff0c;只有知道了如何檢測&#xff0c;我們…

Muduo網絡庫實現 [九] - EventLoopThread模塊

目錄 設計思路 類的設計 模塊的實現 私有接口 公有接口 設計思路 我們說過一個EventLoop要綁定一個線程&#xff0c;未來該EventLoop所管理的所有的連接的操作都需要在這個EventLoop綁定的線程中進行&#xff0c;所以我們該如何實現將EventLoop和線程綁定呢&#xff1f;…

UE5學習筆記 FPS游戲制作38 繼承標準UI

文章目錄 UE的UIUMG的繼承繼承標準控件創建標準控件繼承標準控件的用處 UE的UI 和Untiy有onGui和UGui類似&#xff0c;UE有slateUI和UMG,slateUI是早期只能用C編寫的UI&#xff0c;UMG是現在使用的&#xff0c;可以拖拽編輯的UI slateUI是UMG的父類 UMG的繼承 我們編寫一個控…

C#核心學習(七)面向對象--封裝(6)C#中的拓展方法與運算符重載: 讓代碼更“聰明”的魔法

目錄 一、什么是拓展方法&#xff1f; 二、拓展方法有啥用&#xff1f;怎么寫拓展方法&#xff1f; 1. ?核心用途 2. ?編寫步驟 實現步驟 關鍵點說明 關鍵規則 3. ?注意事項 三、什么是運算符重載&#xff1f; 四、運算符重載有啥用&#xff1f;怎么寫&#xff1f;…

銀行卡歸屬地查詢API接口如何對接?

銀行卡歸屬地查詢 API 接口是一種能讓開發者通過編程方式獲取銀行卡歸屬地等相關信息的工具。借助此接口&#xff0c;開發者可將銀行卡歸屬地查詢功能集成到自己的應用程序或系統里&#xff0c;像電商平臺、第三方支付公司等都能運用它來提升業務的準確性與安全性。 銀行卡歸屬…

ORM mybits mybits-plus

ORM ORM 即對象關系映射&#xff08;Object Relational Mapping&#xff09;&#xff0c;是一種程序設計技術&#xff0c;用于實現面向對象編程語言里不同類型系統的數據之間的轉換。下面從基本概念、工作原理、優勢與劣勢、常見的 ORM 框架等方面詳細介紹 ORM。 常見的orm框架…

網絡編程—網絡概念

目錄 1 網絡分類 1.1 局域網 1.2 廣域網 2 常見網絡概念 2.1 交換機 2.2 路由器 2.3 集線器 2.4 IP地址 2.5 端口號 2.6 協議 3 網絡協議模型 3.1 OSI七層模型 3.2 TCP/IP五層模型 3.3 每層中常見的協議和作用 3.3.1 應用層 3.3.2 傳輸層 3.3.3 網絡層 3.3.4…

4月3日工作日志

一個樸實無華的目錄 今日學習內容&#xff1a;1.關系數據庫 今日學習內容&#xff1a; 1.關系數據庫

git commit Message 插件解釋說明

- feat - 一項新功能 - fix - 一個錯誤修復 - docs - 僅文檔更改 - style - 不影響代碼含義的更改&#xff08;空白、格式化、缺少分號等&#xff09; - refactor - 既不修復錯誤也不添加功能的代碼更改 - perf - 提高性能的代碼更改 - build - 影響構建系統或外部依賴項…

ngx_open_file

定義在 src\os\unix\ngx_files.h #define ngx_open_file(name, mode, create, access) \open((const char *) name, mode|create, access) name&#xff1a;文件名&#xff08;通常是一個字符串&#xff09;。mode&#xff1a;文件打開模式&#x…

23種設計模式-行為型模式-責任鏈

文章目錄 簡介問題解決代碼核心改進點&#xff1a; 總結 簡介 責任鏈是一種行為設計模式&#xff0c;允許你把請求沿著處理者鏈進行發送。收到請求后&#xff0c;每個處理者均可對請求進行處理&#xff0c;或將其傳遞給鏈上的下個處理者。 問題 假如你正在開發一個訂單系統。…

注意力機制在大語言模型中的原理與實現總結

注意力機制在大語言模型中的原理與實現總結 1. 章節介紹 在大語言模型的學習中&#xff0c;理解注意力機制至關重要。本章節旨在深入剖析注意力機制的原理及其在大語言模型中的應用&#xff0c;為構建和優化大語言模型提供理論與實踐基礎。通過回顧神經網絡基礎及傳統架構的局…

kafka消息可靠性傳輸語義

Kafka提供了多種消息傳遞語義&#xff0c;以適應不同的業務需求和可靠性要求。以下是Kafka消息傳輸的可靠性語義及其實現機制&#xff1a; 1. At Most Once&#xff08;至多一次&#xff09; 語義&#xff1a;消息可能會丟失&#xff0c;但不會被重復傳遞。 實現機制&#xf…

NLP高頻面試題(三十三)——Vision Transformer(ViT)模型架構介紹

Transformer架構在自然語言處理領域取得了顯著成功&#xff0c;激發了研究人員將其應用于計算機視覺任務的興趣。Vision Transformer&#xff08;ViT&#xff09;應運而生&#xff0c;成為圖像分類等視覺任務中的新興架構。本文將介紹ViT的基本架構、工作原理&#xff0c;并與傳…

Oracle數據庫數據編程SQL<3.6 PL/SQL 包(Package)>

包是Oracle數據庫中一種重要的PL/SQL程序結構,它將邏輯相關的變量、常量、游標、異常、過程和函數組織在一起,提供了更好的封裝性和模塊化。在大型項目中,可能有很多模塊,而每一個模塊又有自己的存過、函數等。而這些存過、函數默認是放在一起的,如果所有的存過函數都是放…

機器學習 分類算法

【實驗名稱】 實驗&#xff1a;分類算法 【實驗目的】 1.了解分類算法理論基礎 2.平臺實現算法 3. 編程實現分類算法 【實驗原理】 分類(Categorization or Classification)就是按照某種標準給對象貼標簽(label),再根據標簽來區分歸類。 【實驗環境】 OS&#xff1a;Ubuntu16.0…

HTML5 Canvas繪畫板項目實戰:打造一個功能豐富的在線畫板

HTML5 Canvas繪畫板項目實戰&#xff1a;打造一個功能豐富的在線畫板 這里寫目錄標題 HTML5 Canvas繪畫板項目實戰&#xff1a;打造一個功能豐富的在線畫板項目介紹技術棧核心功能實現1. 畫板初始化與工具管理2. 多樣化繪畫工具3. 事件處理機制 技術要點分析1. Canvas上下文優化…

【YOLOv8】YOLOv8改進系列(12)----替換主干網絡之StarNet

主頁&#xff1a;HABUO&#x1f341;主頁&#xff1a;HABUO &#x1f341;YOLOv8入門改進專欄&#x1f341; &#x1f341;如果再也不能見到你&#xff0c;祝你早安&#xff0c;午安&#xff0c;晚安&#x1f341; 【YOLOv8改進系列】&#xff1a; YOLOv8結構解讀 YOLOv8…

1Panel 面板 寶塔面板 Ubuntu 24.04

1Panel 面板 寶塔面板 Ubuntu 24.04 https://1panel.cn/ 1Panel 是一款開源的 Linux 服務器運維管理面板&#xff0c;它就像是給服務器配上了一個智能管家&#xff0c;讓我們能通過 Web 端輕松管理服務器。以往我們管理 Linux 服務器&#xff0c;常常需要在命令行中輸入各種復…

Node.js全局生效的中間件

目錄 1. 目錄結構 2. 代碼實現 2.1 安裝Express 2.2 app.js - 主文件 2.3 globalMiddleware.js - 全局中間件 3. 程序運行結果 4. 總結 在Node.js的Express框架中&#xff0c;全局生效的中間件是指應用程序啟動后&#xff0c;對所有請求都有效的中間件。它通常用于日志記…