設計模式-策略模式 Java

模式概述

策略模式是一種行為型設計模式,它通過定義一系列可互換的算法,并將每個算法封裝成獨立類,使客戶端能夠根據需要動態切換算法

簡單代碼示例

// 1. 抽象策略接口
interface PaymentStrategy {void pay(int amount);
}// 2. 具體策略實現
class CreditCardPayment implements PaymentStrategy {@Overridepublic void pay(int amount) {System.out.println("信用卡支付: " + amount + "元");}
}class AlipayPayment implements PaymentStrategy {@Overridepublic void pay(int amount) {System.out.println("支付寶支付: " + amount + "元");}
}// 3. 環境類(持有策略引用)
class PaymentContext {private PaymentStrategy strategy;public void setStrategy(PaymentStrategy strategy) {this.strategy = strategy;}public void executePayment(int amount) {strategy.pay(amount);}
}// 客戶端調用
public class Client {public static void main(String[] args) {PaymentContext context = new PaymentContext();// 動態切換策略context.setStrategy(new CreditCardPayment());context.executePayment(100);  // 輸出:信用卡支付: 100元context.setStrategy(new AlipayPayment());context.executePayment(200); // 輸出:支付寶支付: 200元}
}

技術細節

1.模式組成

組件職責說明
抽象策略類定義算法的公共接口,聲明策略方法
具體策略類實現抽象策略接口,提供具體算法實現
環境類持有策略對象的引用,通過委托調用具體算法

2.優缺點

優點:

  • 符合開閉原則,新增策略無需修改已有代碼
  • 避免多重條件判斷(如if-else分支)
  • 算法復用,相同策略可被不同上下文使用

缺點:

  • 會產生大量小對象,增加系統復雜性
  • 多層裝飾時調試困難

模式應用

事務管理(PlatformTransactionManager)

策略接口:

  • PlatformTransactionManager

具體策略:

  • DataSourceTransactionManager(JDBC事務)

  • JpaTransactionManager(JPA事務)

  • JtaTransactionManager(分布式事務)

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

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

相關文章

【機器學習深度學習】客觀評估訓練程度

目錄 前言 一、什么是客觀評估? 二、客觀評估的兩大核心方法 1. 判別式評測(Discriminative Evaluation) 2. 生成式評測(Generative Evaluation) 三、為什么客觀評估成本更高? 1.訓練目標收緊 2.訓…

Linux軟件編程:線程間通信

目錄 一、線程間通信基礎 1. 概念 2. 通信基礎:共享空間 二、互斥鎖(Mutex) 1. 概念 2. 使用流程 3. 函數接口 三、死鎖 1. 概念 2. 死鎖產生的 4 個必要條件 3. 避免死鎖的方法 四、信號量(Semaphore) 1…

【學習筆記】JVM GC回收機制

1.三種基本的垃圾回收算法 1>標記-清除法 ①先將從樹根開始,可以到達的對象標記為可達(JVM中的對象們存儲為一顆樹) ②將沒有標記的對象清除掉 缺點:會產生大量內存碎片 2>復制算法(新生代) ①先將a區…

軟件的終極:為70億人編寫70億個不同的軟件

這是個腦洞大開的想法。昨天晚上,我在用Claude code幫我寫一個小工具,用來管理我本地那些亂七八糟的文檔。寫著寫著,突然意識到一個問題:這個工具完全是按照我的工作習慣定制的——我喜歡用Markdown,習慣把TODO放在文件…

LakeHouse--湖倉一體架構

大家可能發現了,近些年湖倉一體數據架構被提及的頻率越來越高。各家大廠也有湖倉一體架構的實踐,也有很多公開分享。 那什么是湖倉一體?為什么出現了湖倉一體架構,換言之,它解決了以前數據倉庫、數據湖+數倉兩層架構所不能解決的什么問題? 本文會從數倉、數據湖依次介紹…

基于FPGA的實時圖像處理系統(1)——SDRAM回環測試

SDRAM回環設計 文章目錄SDRAM回環設計一、SDRAM簡介1、引腳2、內部結構框圖3、操作指令二、系統設計三、實現流程1、SDRAM接口2、FIFO設置3、內部SDRAM的控制模塊4、其他四、實現效果五、總結六、代碼1、top2、sdram_top3、sdram_ctrl一、SDRAM簡介 SDRAM英文全稱“Synchronou…

一鍵檢測接口是否存活:用 Python/Shell 寫個輕量級監控腳本

網羅開發(小紅書、快手、視頻號同名)大家好,我是 展菲,目前在上市企業從事人工智能項目研發管理工作,平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術,包括iOS、前端、Harmony OS、Java、Python等方…

優秀工具包-Hutool工具詳解

優秀工具包-Hutool工具詳解 課程概述 Hutool簡介 定位: 小而全的Java工具庫,簡化開發流程。對文件、流、加密解密、轉碼、正則、線程、XML等JDK方法進行封裝。 核心優勢:零依賴、高性能、中文網頁完善。 應用場景:Web開發、數…

《深度解構:構建瀏覽器端Redis控制臺的WebSocket協議核心技術》

Redis作為高性能的內存數據庫,其原生客戶端多依賴命令行或桌面應用,而瀏覽器端控制臺的缺失,成為制約Web化管理的關鍵瓶頸,WebSocket協議的出現,打破了HTTP協議單向通信的局限,為瀏覽器與Redis服務之間建立持久、雙向的實時連接提供了可能。本文將從協議本質、交互邏輯、…

Pushgateway安裝和部署,以及對應Prometheus調整

目錄Pushgateway簡介安裝驗證Prometheus的配置:其它命令Pushgateway簡介 Pushgateway 是 Prometheus 生態系統中的一個組件。主要特點是推送而非拉取:Prometheus 默認采用拉取(pull)模式收集指標,但 Pushgateway 允許…

JAVA面試匯總(四)JVM(一)

久違的重新寫了一篇面試匯總的,關于JVM的一篇,一共三篇,今天寫了第一篇,繼續重新學習,重新卷起來,come on baby 1.什么情況下會觸發類的初始化? (1)首先是類未被初始化時…

Agent中的memory

rag系列文章目錄 文章目錄rag系列文章目錄前言一、Memory機制作用二、memory分類三、langgraph實踐總結前言 眾所周知,大模型是無狀態的。但是基于大模型的agent一般是有狀態的,也就是它有記憶功能。在AI Agent框架中,Memory機制是核心組件之…

AI與IT從業者的未來:替代焦慮還是協作革命?

??引言:技術滲透與核心命題??2025年,人工智能技術已從實驗室走向產業核心。國務院《關于深入實施“人工智能”行動的意見》推動AI在醫療、制造、金融等領域的規模化落地,全球AI應用用戶規模突破2.3億,生成式AI工具滲透率達16.…

手機版碰一碰發視頻系統批量剪輯功能開發,支持OEM貼牌

引言在當今短視頻盛行的時代,視頻內容的快速生產與分享變得愈發重要。手機版碰一碰發視頻系統,借助 NFC 等近場通信技術,實現了便捷的數據交互與視頻分享,而在此基礎上集成的批量剪輯功能,更是為內容創作者和商家帶來了…

Spring AMQP如何通過配置文件避免硬編碼實現解耦

在使用Spring AMQP基于注解聲明監聽者時,可通過抽取常量來避免硬編碼:RabbitListener(bindings QueueBinding(exchange Exchange(MQConstant.USER_EXCHANGE),value Queue(MQConstant.USER_QUEUE),key MQConstant.USER_REDIS_BINDING))public void de…

解決zabbix圖片中文亂碼

要把 Zabbix 前端字體替換為 simkai.ttf(楷體,解決亂碼常用),按以下步驟操作:1. 確認 simkai.ttf 路徑 先找到系統里 simkai.ttf 字體文件,若沒有,可從 Windows 系統(C:\Windows\Fon…

實例分割-動手學計算機視覺13

介紹 實例分割(instance segmentation)的目的是從圖像中分割出每個目標實例的掩模(mask)。與語義分割相比,實例分割不但要區分不同的類別,還要區分出同一種類別下的不同目標實例。如圖13-1所示 語義分割的結果中,不同的羊對應的標簽是一樣的…

水環境遙感分析!R語言編程+多源遙感數據預處理;水體指數計算、水深回歸分析、水溫SVM預測、水質神經網絡建模及科研級可視化制圖

系統性地整合R語言編程、遙感數據處理及機器學習建模,涵蓋水線提取(水體指數與閾值法)、水深反演(多元回歸)、水溫預測(支持向量機)、水質評估(神經網絡)等核心內容&…

微信公眾號/小程序百萬級OpenID自動化獲取工具

摘要 本報告詳細闡述了微信用戶列表數據獲取與處理工具的設計思路,包括分頁處理機制、頻率控制策略、斷點續傳功能和分布式存儲方案。針對微信API調用限制和用戶數據規模特點,該工具旨在高效、安全地獲取和存儲微信用戶列表數據,同時嚴格遵守微信API調用頻率限制,確保系統…

物聯網系統中傳感器到網關到物聯網平臺的傳輸路徑、協議、原理、用途與架構詳解

摘要物聯網(IoT)系統通過傳感器、網關和物聯網平臺實現數據的采集、傳輸、處理和應用。本文詳細分析了傳感器到網關再到物聯網平臺的傳輸路徑,涵蓋直接連接、網關中繼、邊緣計算、多級網關和混合路徑五種方式;介紹了短距離&#x…