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

Java 設計模式全景圖譜:23 種 GoF 模式分類與 7 大 SOLID 原則

     編輯:Java 相關知識

創建型模式:對象實例化的藝術

模式核心意圖適用場景關鍵角色
抽象工廠創建相關/依賴對象族,無需指定具體類多產品族、跨平台 UI、數據庫驅動切換AbstractFactory, ConcreteFactory, AbstractProduct
建造者分步構建複雜對象,分離構建與表示參數多、可選參數多、不可變對象Builder, Director, Product
工廠方法定義創建接口,子類決定實例化哪個類框架擴展點、插件架構、日誌/驅動加載Creator, ConcreteCreator, Product
原型通過複製現有實例創建新對象創建成本高、狀態少變化、避免子類爆炸Prototype, ConcretePrototype, Client
單例確保類只有一個實例,提供全局訪問配置管理、連接池、緩存、日誌器Singleton (私有構造、靜態實例、靜態工廠)
多例管理有限數量實例池線程池、連接池、對象池模式基礎Multiton (Map)

結構型模式:類與對象的組合藝術

模式核心意圖適用場景關鍵角色
適配器將接口轉換為客戶期望的另一接口第三方庫整合、舊系統遷移、接口不兼容Target, Adapter, Adaptee (對象/類適配器)
橋接抽象與實現分離,雙向獨立擴展多維度變化(形狀/顏色、平台/業務)Abstraction, RefinedAbstraction, Implementor
組合樹形結構表現「整體-部分」層次文件系統、組織架構、GUI 組件樹、ASTComponent, Leaf, Composite
裝飾者動態附加職責,替代繼承擴展IO 流、集合包裝、切面增強、中間件鏈Component, ConcreteComponent, Decorator
外觀提供統一高層接口,簡化子系統使用微服務網關、SDK 封裝、遺留系統隔離Facade, Subsystem Classes
享元共享細粒度對象,減少內存佔用字符渲染、棋子、大量相似對象Flyweight, FlyweightFactory, UnsharedFlyweight
代理為對象提供替身控制訪問遠程調用、延遲加載、權限控制、AOPSubject, Proxy, RealSubject

行為型模式:對象間協作與職責分配

模式核心意圖適用場景關鍵角色
責任鏈請求沿鏈路傳遞,每節點可處理或轉發過濾器鏈、異常處理、審批流程、中間件Handler, ConcreteHandler, Client
命令將請求封裝為對象,支持撤銷/隊列/日誌GUI 按鈕、事務操作、宏命令、異步任務Command, ConcreteCommand, Invoker, Receiver
解釋器為語言定義文法並構建解釋器SQL 解析、規則引擎、DSL、表達式計算AbstractExpression, Terminal/Nonterminal
迭代器順序訪問聚合對象,不暴露內部結構集合遍歷、數據庫游標、樹/圖遍歷策略Iterator, ConcreteIterator, Aggregate
中介者集中管理對象間交互,降低耦合MVC 控制器、聊天室、機場調度、表單驗證Mediator, ConcreteMediator, Colleague
備忘錄捕獲對象內部狀態,支持撤銷恢復編輯器撤銷、棋局悔棋、事務回滾、快照Originator, Memento, Caretaker
觀察者一對多依賴,狀態變更自動通知事件總線、消息隊列、監聽器、響應式流Subject, Observer, ConcreteSubject/Observer
狀態對象內部狀態改變行為,如換類訂單狀態機、TCP 連接、遊戲角色狀態State, ConcreteState, Context
策略定義算法族,封裝互換,獨立於客戶支付方式、排序算法、壓縮策略、路由規則Strategy, ConcreteStrategy, Context
模板方法定義算法骨架,子類實現特定步驟框架流程控制、數據導入導出、測試模板AbstractClass, ConcreteClass
訪問者分離操作與對象結構,新增操作不改類編譯器 AST 遍歷、報表導出、對象結構操作Visitor, ConcreteVisitor, Element

七大設計原則 (SOLID + 更多)

  1. 單一職責原則 (SRP):一個類只負責一項職責,引起變化的原因只有一個
  2. 里氏替換原則 (LSP):子類必須能替換父類而不破壞程序語義(契約繼承)
  3. 依賴倒置原則 (DIP):高層模塊不依賴低層,雙方依賴抽象;面向接口編程
  4. 接口隔離原則 (ISP):建立單一專用接口,拒絕臃腫大接口;客戶不依賴不需的方法
  5. 迪米特法則 (LoD):最少知識原則,只與直接朋友溝通;低耦合、高內聚
  6. 開閉原則 (OCP):對擴展開放,對修改關閉;通過抽象實現熱插拔
  7. 組合/聚合復用原則 (CARP):優先使用組合/聚合(Has-a),少用繼承;靈活復用

模式選擇決策樹

graph TD A[需要創建對象?] -->|是| B[創建型模式] A -->|否| C[需要組織結構?] C -->|是| D[結構型模式] C -->|否| E[行為型模式] B --> F{單例? 工廠? 建造者?} D --> G{適配? 代理? 裝飾?} E --> H{算法變化? 狀態流轉? 解耦協作?}

實戰建議

  • 模式是解決特定問題的成熟方案,非炫技工具
  • 先理解問題本質,再匹配模式,避免過度設計
  • 現代語言特性(Lambda、Stream、Record、Sealed)簡化了部分模式實現
  • Spring/Netty/Guava 等框架源碼是模式應用最佳教材
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved