| 模式 | 核心意圖 | 適用場景 | 關鍵角色 |
|---|---|---|---|
| 抽象工廠 | 創建相關/依賴對象族,無需指定具體類 | 多產品族、跨平台 UI、數據庫驅動切換 | AbstractFactory, ConcreteFactory, AbstractProduct |
| 建造者 | 分步構建複雜對象,分離構建與表示 | 參數多、可選參數多、不可變對象 | Builder, Director, Product |
| 工廠方法 | 定義創建接口,子類決定實例化哪個類 | 框架擴展點、插件架構、日誌/驅動加載 | Creator, ConcreteCreator, Product |
| 原型 | 通過複製現有實例創建新對象 | 創建成本高、狀態少變化、避免子類爆炸 | Prototype, ConcretePrototype, Client |
| 單例 | 確保類只有一個實例,提供全局訪問 | 配置管理、連接池、緩存、日誌器 | Singleton (私有構造、靜態實例、靜態工廠) |
| 多例 | 管理有限數量實例池 | 線程池、連接池、對象池模式基礎 | Multiton (Map |
| 模式 | 核心意圖 | 適用場景 | 關鍵角色 |
|---|---|---|---|
| 適配器 | 將接口轉換為客戶期望的另一接口 | 第三方庫整合、舊系統遷移、接口不兼容 | Target, Adapter, Adaptee (對象/類適配器) |
| 橋接 | 抽象與實現分離,雙向獨立擴展 | 多維度變化(形狀/顏色、平台/業務) | Abstraction, RefinedAbstraction, Implementor |
| 組合 | 樹形結構表現「整體-部分」層次 | 文件系統、組織架構、GUI 組件樹、AST | Component, Leaf, Composite |
| 裝飾者 | 動態附加職責,替代繼承擴展 | IO 流、集合包裝、切面增強、中間件鏈 | Component, ConcreteComponent, Decorator |
| 外觀 | 提供統一高層接口,簡化子系統使用 | 微服務網關、SDK 封裝、遺留系統隔離 | Facade, Subsystem Classes |
| 享元 | 共享細粒度對象,減少內存佔用 | 字符渲染、棋子、大量相似對象 | Flyweight, FlyweightFactory, UnsharedFlyweight |
| 代理 | 為對象提供替身控制訪問 | 遠程調用、延遲加載、權限控制、AOP | Subject, 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 |