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

設計模式入門:23 種模式分類速查與核心場景

     編輯:關於C語言

設計模式入門:23 種模式分類速查與核心場景

設計模式是軟件開發中經驗的結晶,GoF《設計模式》一書定義了 23 種經典模式,分為創建型、結構型、行為型三大類。本文提供清晰的分類表、核心意圖一句話摘要、典型應用場景,幫助快速建立全局認知框架。

一、創建型模式(5 種)— 封裝對象創建過程

模式核心意圖典型場景
Singleton(單例)保證類只有一個實例,提供全局訪問點配置管理器、連接池、日誌器
Abstract Factory(抽象工廠)提供創建一系列相關/依賴對象的接口,無需指定具體類跨平台 UI 庫、數據庫驅動適配
Factory Method(工廠方法)定義創建對象接口,由子類決定實例化哪個類文檔解析器、插件系統
Builder(建造者)將複雜對象構建與表示分離,同一構建過程可創建不同表示HTTP 請求構建、複雜配置對象
Prototype(原型)用原型實例指定創建對象種類,通過拷貝創建新對象對象池、撤銷/重做、動態加載類

二、結構型模式(7 種)— 處理類/對象組合關係

模式核心意圖典型場景
Adapter(適配器)將一個類接口轉換為客戶期望的另一接口第三方庫適配、舊系統接口兼容
Bridge(橋接)將抽象與實現解耦,使兩者可獨立變化跨平台圖形繪製、驅動程序架構
Composite(組合)將對象組合成樹形結構,統一單個/組合對象接口文件系統、GUI 組件樹、菜單系統
Decorator(裝飾器)動態給對象添加職責,比繼承更靈活IO 流包裝、日誌增強、權限檢查
Facade(外觀)為子系統提供統一高層接口,降低耦合編譯器子系統、服務層統一入口
Flyweight(享元)共享細粒度對象,減少內存佔用字符渲染、棋子、大量相似對象
Proxy(代理)為其他對象提供代理以控制訪問遠程代理、虛擬代理、保護代理、AOP

三、行為型模式(11 種)— 關注對象間通信與職責分配

模式核心意圖典型場景
Chain of Responsibility(職責鏈)多個對象有機會處理請求,避免發送者/接收者耦合Servlet Filter、異常處理鏈、審批流程
Command(命令)將請求封裝為對象,支持參數化、排隊、日誌、撤銷GUI 按鈕、事務管理、宏錄製
Interpreter(解釋器)定義語言文法表示及解釋器SQL 解析、正則引擎、腳本語言
Iterator(迭代器)順序訪問聚合對象元素,不暴露內部結構STL 迭代器、集合遍歷
Mediator(中介者)用中介對象封裝對象交互,降低耦合MVC 控制器、聊天室、航管系統
Memento(備忘錄)捕獲對象內部狀態,外部化存儲以便恢復編輯器撤銷、遊戲存檔、事務回滾
Observer(觀察者)定義一對多依賴,狀態變更自動通知更新事件總線、Model-View 綁定、消息推送
State(狀態)對象內部狀態改變時改變行為,如換類訂單狀態機、TCP 連接狀態、遊戲角色
Strategy(策略)定義算法族,封裝並可互換,算法獨立於客戶排序算法切換、支付方式、壓縮策略
Template Method(模板方法)定義算法骨架,將步驟延遲到子類數據導出流程、測試框架、解析器框架
Visitor(訪問者)在不改變元素類前提下定義新操作編譯器 AST 遍歷、報表生成、類型分發

四、高頻必會「核心五模式」

  1. Singleton:全局唯一實例,線程安全實現(雙重檢查鎖/靜態局部變量)。
  2. Factory Method / Abstract Factory:解耦創建邏輯,框架擴展點核心。
  3. Observer:事件驅動架構基石,MVC、消息隊列核心。
  4. Strategy:算法封裝替換,開閉原則典範。
  5. Decorator / Proxy:AOP、中間件、攔截器實現基礎。

五、學習建議

  • 先理解意圖,再看結構:不要死記類圖,先搞清「解決什麼問題」。
  • 結合框架源碼:Spring 用 Factory/Proxy/Template/Observer,Java IO 用 Decorator,Servlet 用 Chain of Responsibility。
  • 重構中識別:在代碼異味(大量 if-else、重複代碼、強耦合)中嘗試引入模式。
  • 避免過度設計:簡單場景用簡單代碼,模式是為了應對變化,不是炫技。

設計模式不是銀彈,但它是經驗的詞彙表。建立「模式詞彙」後,團隊溝通效率將質變:一句「這裡用 Strategy 替換硬編碼」勝過千言萬語。

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