首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 設計模式全景解析:23 種模式與 7 大設計原則深度總結

     編輯:Java 相關知識

前言:為什麼需要設計模式?

設計模式是軟件開發中經驗的結晶,為解決特定上下文中的重複問題提供了經驗證的解決方案。GoF(四人組)在《設計模式:可復用面向對象軟件的基礎》中歸納了 23 種經典模式,分為創建型、結構型、行為型三大類。配合 SOLID 等 7 大設計原則,能指導我們編寫高內聚、低耦合、易擴展的代碼。

一、創建型模式(5 種):對象實例化的藝術

核心關注點:如何優雅地創建對象? 將實例化邏輯封裝,解耦客戶代碼與具體類。

模式核心意圖適用場景
抽象工廠創建相關/依賴對象家族,無需指定具體類系統需支持多個產品族,如不同皮膚主題的 UI 組件庫
建造者分步構建複雜對象,將構建與表示分離對象構建過程複雜,參數多、順序敏感(如 HTTP 請求構建器)
工廠方法定義創建接口,由子類決定實例化哪個類框架預留擴展點,如日誌框架的 Logger 創建
原型通過複製現有實例創建新對象,避免昂貴創建過程初始化開銷大,且狀態相似的對象批量創建
單例確保類全局僅有一實例,提供全局訪問點配置管理器、連接池、緩存管理器等全局唯一資源
補充: 多例模式 非 GoF 標準模式,實際為多模式組合應用,此處不展開。

二、結構型模式(7 種):類與對象的組合藝術

核心關注點:如何通過組合實現更靈活的結構?

模式核心意圖關鍵點
適配器將接口轉換為客戶期望的另一接口對象適配器用組合,類適配器用多重繼承
橋接將抽象與實現分離,使二者可獨立變化雙維度變化時替代繼承爆炸,如形狀×顏色
組合將對象組成樹形結構表現「整體/部分」層次客戶統一處理單個對象與組合對象,如文件系統
裝飾者動態附加職責,提供比繼承更彈性的擴展Java I/O 流體系經典應用
外觀為子系統提供統一高層接口,降低耦合簡化複雜子系統調用,如醫院掛號統一窗口
享元共享細粒度對象,減少內存佔用大量相似對象,如文本編輯器字符對象
代理為對象提供替身控制訪問靜態/動態代理,Spring AOP 底層機制

三、行為型模式(11 種):對象間交互與職責分配

核心關注點:對象如何協作完成任務?

模式核心意圖典型應用
責任鏈請求沿處理者鏈傳遞,各節點可處理或轉發Servlet Filter 鏈、日誌級別過濾
命令將請求封裝為對象,支持排隊、日誌、撤銷GUI 菜單、事務管理、宏命令
解釋器為語言定義文法並構建解釋器正則表達式引擎、SQL 解析器
迭代器順序訪問聚合對象元素,不暴露內部結構Java Collection 框架核心
中介者集中管理對象間複雜通信MVC 控制器、聊天室服務器
備忘錄捕獲對象內部狀態以便後續恢復編輯器撤銷、遊戲存檔
觀察者定義一對多依賴,狀態變更自動通知事件監聽、消息隊列、Spring 事件機制
狀態對象內部狀態改變時行為隨之改變訂單狀態流轉、TCP 連接狀態
策略定義算法族並封裝,使其可互換支付方式、排序算法、壓縮策略
模板方法定義算法骨架,延遲步驟到子類實現JDBC 模板、Servlet 生命周期
訪問者在不修改類的前提下為對象結構添加操作編譯器 AST 遍歷、報表導出

四、七大設計原則:架構決策的指南針

  1. 單一職責原則 (SRP):一個類只負責一項職責,變更原因單一。
  2. 里氏替換原則 (LSP):子類必須能替換父類而不破壞程序正確性,規範繼承關係。
  3. 依賴倒置原則 (DIP):高層模塊不依賴低層,雙方依賴抽象;抽象不依賴細節,細節依賴抽象。面向接口編程核心。
  4. 接口隔離原則 (ISP):建立單一專用接口,拒絕臃腫大接口,接口方法盡量少。
  5. 迪米特法則 (LoD):只與直接朋友通信,降低耦合,提高內聚。最少知識原則。
  6. 開閉原則 (OCP):對擴展開放,對修改關閉。通過抽象實現熱插拔。
  7. 組合/聚合復用原則 (CARP):優先使用組合/聚合實現復用,少用繼承。

五、實戰建議

  • 模式非銀彈,理解意圖勝過死記結構。
  • 實際開發中常見混合應用,如工廠+單例、策略+模板方法。
  • 重構時引入模式優於初期過度設計(YAGNI 原則)。
  • 原則之間存在張力(如 SRP 與 ISP),需根據業務場景權衡。

熟練掌握 23 種模式與 7 大原則,能顯著提升代碼質量與系統可維護性,是進階架構師的必修內功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved