【最新】Java的幾種設計模式詳解及適用業務場景


? 1. 單例模式(Singleton)

  • 定義:確保類只有一個實例,并提供全局訪問點。
  • 優點:節省資源、控制訪問。
  • 場景:數據庫連接池、日志管理器、配置中心。
  • 代碼要點
    • 構造方法私有
    • 靜態變量保存唯一實例
    • 公共靜態方法 getInstance() 獲取實例

? 2. 工廠模式(Factory)

  • 定義:將對象創建邏輯封裝,客戶端通過工廠獲取對象。
  • 分類:簡單工廠、工廠方法、抽象工廠。
  • 優點:解耦、擴展性強。
  • 場景:對象創建復雜、需解耦創建與使用。
  • 代碼要點
    • 產品接口 + 具體產品類
    • 工廠類根據參數返回不同產品實例

? 3. 觀察者模式(Observer)

  • 定義:一對多依賴關系,主題狀態變化自動通知所有觀察者。
  • 優點:松耦合、廣播通信。
  • 場景:事件系統、消息推送、發布訂閱模型。
  • 代碼要點
    • Subject 管理觀察者列表
    • Observer 接口定義更新方法
    • 狀態變化時調用 notifyObservers()

? 4. 策略模式(Strategy)

  • 定義:封裝一系列算法,使它們可互相替換。
  • 優點:避免 if-else、提高擴展性。
  • 場景:排序策略、支付方式、資源調度。
  • 代碼要點
    • 策略接口定義算法行為
    • 上下文類持有策略對象
    • 運行時動態切換策略

? 5. 適配器模式(Adapter)

  • 定義:將一個接口轉換為另一個接口,使不兼容類協同工作。
  • 優點:復用舊代碼、符合開閉原則。
  • 場景:集成第三方庫、接口不兼容。
  • 代碼要點
    • 目標接口 + 被適配類
    • 適配器類實現目標接口并持有被適配對象

? 6. 裝飾器模式(Decorator)

  • 定義:動態地為對象添加額外功能,不改變原結構。
  • 優點:比繼承更靈活、支持組合擴展。
  • 場景:日志包裝、緩存包裝、權限控制。
  • 代碼要點
    • 組件接口 + 具體組件
    • 裝飾器抽象類持有組件對象
    • 具體裝飾器擴展功能

? 7. 代理模式(Proxy)

  • 定義:為其他對象提供代理以控制訪問。
  • 優點:延遲加載、權限控制、日志記錄。
  • 場景:權限校驗、遠程調用、緩存代理。
  • 代碼要點
    • 接口定義行為
    • 真實類實現接口
    • 代理類實現接口并控制對真實對象的訪問

? 8. 外觀模式(Facade)

  • 定義:為復雜子系統提供統一的高層接口。
  • 優點:簡化客戶端調用、降低耦合。
  • 場景:封裝復雜API、整合多個服務調用。
  • 代碼要點
    • 多個子系統類
    • 外觀類封裝子系統調用流程
    • 客戶端只與外觀類交互

? 9. 模板方法模式(Template Method)

  • 定義:定義算法骨架,將具體步驟延遲到子類實現。
  • 優點:復用流程、擴展靈活。
  • 場景:支付流程、GUI事件處理、產品組裝線。
  • 代碼要點
    • 抽象類定義模板方法(final)
    • 子類實現可變步驟
    • 鉤子方法可選覆蓋

🔍 總結速查表

模式名稱關鍵詞典型場景
單例唯一實例配置中心、日志器
工廠對象創建解耦創建復雜對象、依賴注入
觀察者一對多通知消息推送、事件系統
策略動態切換算法排序、支付、調度
適配器接口轉換第三方庫集成
裝飾器動態增強功能日志、緩存、權限包裝
代理控制訪問權限代理、延遲加載
外觀簡化復雜接口封裝子系統、統一API入口
模板方法流程復用支付流程、GUI事件、組裝線

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

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

相關文章

單鏈表的手動實現+相關OJ題

目錄 鏈表的介紹 單鏈表的手動實現 單鏈表的基本框架 打印鏈表: 獲取表長: 頭插法新增節點: 尾插法新增節點: 在指定下標插入: 鏈表的查找 刪除鏈表中第一個出現的key: 刪除鏈表中所有key值 鏈表…

梯度提升之原理

簡介 梯度提升主要是基于數學最值問題 數學描述 目標函數為 obj(θ)∑i1nl(yi,y^i(t))∑k1tw(fk)obj(\theta) \sum_{i1}^n l(y_i, \hat y_i^{(t)}) \sum_{k1}^t w(f_k)obj(θ)i1∑n?l(yi?,y^?i(t)?)k1∑t?w(fk?) 其中ttt表示集成的樹的個數,y^i(t)y^i(t?1)…

[學習] Hilbert變換:從數學原理到物理意義的深度解析與仿真實驗(完整實驗代碼)

Hilbert變換:從數學原理到物理意義的深度解析與仿真實驗 文章目錄Hilbert變換:從數學原理到物理意義的深度解析與仿真實驗一、數學原理二、作用與物理意義1.構造解析信號2.相位移動特性3.應用場景三、仿真實驗實驗1:正弦信號的Hilbert變換實驗…

對話弋途科技:當AI重構汽車大腦,一場車載操作系統的“覺醒年代“開始了

(圖片來源:Pixels)站在未來看歷史,AI汽車剛剛開始。數科星球原創作者丨苑晶編輯丨大兔當特斯拉的自動駕駛仍在全球引發爭議時,中國智能汽車戰場已悄然開啟第二幕。從"四個輪子的大手機"到"移動智能空間…

?機器學習量化交易模型全面剖析報告基于因子庫的機器學習交易模型構建指南

目錄 第一章:機器學習在加密貨幣量化交易中的應用概述 范式轉變:從傳統因子到機器學習驅動的策略 為什么選擇機器學習?機遇、挑戰與核心概念 機遇 挑戰 核心概念 第二章:為機器學習準備您的因子庫 理解量化因子作為機器學…

內容創作智能體:多模態內容生成的完整解決方案

內容創作智能體:多模態內容生成的完整解決方案 🌟 嗨,我是IRpickstars! 🌌 總有一行代碼,能點亮萬千星辰。 🔍 在技術的宇宙中,我愿做永不停歇的探索者。 ? 用代碼丈量世界&…

測試學習之——Pytest Day4

Pytest作為Python中功能強大且易于使用的測試框架,深受開發者喜愛。它不僅提供了簡潔的測試編寫方式,還通過豐富的配置選項、靈活的標記機制和強大的數據驅動能力,極大地提升了測試效率和可維護性。本文將深入探討Pytest的配置意義與層級、常…

【軟件系統架構】系列七:系統性能——路由器性能深入解析

目錄 一、路由器的核心功能 二、路由器性能核心指標 1. 吞吐量(Throughput) 2. 并發連接數(Session Capacity) 3. 每秒連接數(CPS,Connections Per Second) 4. 轉發延遲(Laten…

【數據結構】第一講 —— 概論

【數據結構】第一講 —— 概論 文章目錄【數據結構】第一講 —— 概論1.1 基本概念和常用術語1.2 了解數據結構1. 數據結構2. 數據的邏輯結構3. 數據的物理結構(存儲結構)4. 數據的運算1.3 算法的描述和分析1.3.1 算法的描述1.3.21.1 基本概念和常用術語…

全面解析MySQL(2)——CRUD基礎

1.CreateCreate(創建):添加新數據到數據庫中#基礎語法 insert into table_name (column1,column2,column3, ...) values (value1,value2,value3, ...);1.1 單行全列插入value中值的數量和順序必須和column?致describe demo1; -----------------------------------…

某外企筆試總結——純C語言

這里寫自定義目錄標題一、sizeof 計算(32位環境)二、簡答題三、數據存儲區域與可修改性四、字符串比較輸出及原因五、數組指針運算輸出六、字符串倒序代碼錯誤排查七、下面程序可以把1維數組轉為2維數組,然后調用 printArr2D 打印出數組內容&…

Qt Graphs 模塊擬取代 charts 和 data visualization還有很長的路要走

近期關注 Qt 6.10 的分支進展, 發現了 Qt 6.10 的 charts 和 data visualization (以下簡稱 DV)已經被deprecated, 功能將會合并到 graphs 模塊。如果后面 charts\ DV 被棄用,那算是很大的API變化了。從Qt 6.5 以后開始引入的 gra…

2025牛客暑期多校訓練營2(部分補題)

題目鏈接:牛客競賽_ACM/NOI/CSP/CCPC/ICPC算法編程高難度練習賽_牛客競賽OJ B Bitwise Perfect 思路 考慮到由,那么只有變小的時候對答案的貢獻才能夠減少,從二進制的角度考慮什么時候變小,只有min(x,y)中的最高位1異或之后變…

Nginx的location匹配規則

Nginx的location匹配規則 為什么你的Nginx配置總是不生效? 改了Nginx配置無數次,reload命令執行了幾十遍,瀏覽器訪問時卻依然返回404?運維工程師小張上周就遇到了這個問題:明明配置了location /static/ { root /var/ww…

USB 2.0 vs USB 3.0:全面技術對比與選擇指南

USB 2.0 vs USB 3.0:全面技術對比與選擇指南 引言 在當今數字時代,USB接口已成為連接設備與計算機的最普遍標準之一。從2000年USB 2.0的發布到2008年USB 3.0的問世,USB技術經歷了顯著的演進。本文將深入比較這兩種廣泛使用的USB標準&#xff…

DApp架構設計與開發流程指南

目錄 DApp架構設計與開發流程指南 引言:DApp的核心特性 一、DApp架構設計 1.1 分層架構設計 各層核心組件: 1.2 典型架構模式 1.2.1 全去中心化架構 1.2.2 混合架構(推薦) 二、開發流程 2.1 敏捷開發流程 2.2 詳細開發階段 階段1:需求分析與設計(1-2周) 階段2:智能合約…

Windows下odbc配置連接SQL Server

一、查看SQL Server服務是否啟動打開SQL Server 2022配置管理器查看SQL Server運行狀態,可以設置 啟動或停止服務二、windows下如何配置ODBC數據源1、Windows搜索欄中輸入“ODBC數據源管理器”并選擇“以管理員身份運行”來打開它2、添加新的數據源ODBC數據源管理器…

MySQL—表設計和聚合函數以及正則表達式

文章目錄一、第一范式(原子性)二、第二范式(消除部分依賴)三、第三范式(消除傳遞依賴)四、表設計五、聚合函數六、正則表達式MySQL 的三大范式(1NF、2NF、3NF)是關系型數據庫設計的核…

基于Electron打包jar成Windows應用程序

基于Electron打包jar成Windows應用程序簡介注意編譯及命令:運行效果登錄界面用戶管理界面界面全屏鎖屏界面文檔查看界面簡介 本文介紹了一種將maven jar包打包成Windows下EXE可執行程序的方法。 Maven打包Java Web應用成jar,Electron封裝jar成Windows …

Autosar RTE實現觀測量生成-基于ETAS軟件

文章目錄前言觀測量定義arTypedPerInstanceMemoryPorts Measurable工具鏈配置及使用Port中的配置arTypedPerInstanceMemory觀測量生成文件分析總結前言 之前我們在XCP中,對于標定量和觀測量并沒有嚴格按照Autosar標準中定義,Autosar RTE中對標定量和觀測…