GoF(Gang of Four)設計模式是由四位計算機科學家 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著的書籍《Design Patterns: Elements of Reusable Object-Oriented Software》中提出的設計模式
目錄
一、創建型模式(Creational Patterns)
單例模式(Singleton)
工廠方法模式(Factory Method)
抽象工廠模式(Abstract Factory)
建造者模式(Builder)
原型模式(Prototype)
二、結構型模式(Structural Patterns)
適配器模式(Adapter)
裝飾器模式(Decorator)
代理模式(Proxy)
外觀模式(Facade)
橋接模式(Bridge)
組合模式(Composite)
享元模式(Flyweight)
三、行為型模式(Behavioral Patterns)
策略模式(Strategy)
觀察者模式(Observer)
命令模式(Command)
狀態模式(State)
責任鏈模式(Chain of Responsibility)
模板方法模式(Template Method)
迭代器模式(Iterator)
中介者模式(Mediator)
備忘錄模式(Memento)
訪問者模式(Visitor)
解釋器模式(Interpreter)
一、創建型模式(Creational Patterns)
關注對象的創建機制,降低對象創建的復雜性
單例模式(Singleton)
確保一個類只有一個實例,并提供全局訪問點。
示例:數據庫連接池、全局配置對象。
工廠方法模式(Factory Method)
定義一個創建對象的接口,但由子類決定實例化哪個類。
示例:日志記錄器(文件日志 vs 數據庫日志)。
抽象工廠模式(Abstract Factory)
創建一組相關或依賴對象的家族,而不指定具體類。
示例:跨平臺的 UI 組件(Windows/Mac 的按鈕、文本框)。
建造者模式(Builder)
分步驟構建復雜對象,分離構造過程與表示。
示例:生成不同格式的文檔(HTML/PDF)。
原型模式(Prototype)
通過復制現有對象來創建新對象,避免重復初始化。
示例:Java 的 Cloneable 接口。
二、結構型模式(Structural Patterns)
關注類和對象的組合方式,形成更大的結構
適配器模式(Adapter)
使不兼容的接口能夠協同工作。
示例:將舊系統的接口適配到新系統。
裝飾器模式(Decorator)
動態地為對象添加額外職責,避免繼承導致的類爆炸。
示例:Java I/O 流(BufferedInputStream 裝飾 FileInputStream)。
代理模式(Proxy)
為其他對象提供一種代理以控制訪問。
示例:遠程代理(RPC)、虛擬代理(延遲加載圖片)。
外觀模式(Facade)
為復雜子系統提供一個統一的簡化接口。
示例:一鍵啟動電腦(封裝 CPU、內存、硬盤的啟動過程)。
橋接模式(Bridge)
將抽象與實現分離,使它們可以獨立變化。
示例:不同形狀(圓形/方形)和顏色(紅/藍)的組合。
組合模式(Composite)
將對象組合成樹形結構以表示“部分-整體”層次。
示例:文件系統(文件+文件夾的統一處理)。
享元模式(Flyweight)
通過共享技術高效地支持大量細粒度對象。
示例:游戲中的重復貼圖(如森林中的樹木)。
三、行為型模式(Behavioral Patterns)
關注對象間的通信和職責分配
策略模式(Strategy)
定義一系列算法,封裝它們并使它們可互換。
示例:排序算法(快速排序、冒泡排序的動態切換)。
觀察者模式(Observer)
定義對象間的一對多依賴,當一個對象狀態改變時,所有依賴者自動收到通知。
示例:事件監聽、消息隊列。
命令模式(Command)
將請求封裝為對象,以便支持撤銷、隊列等操作。
示例:GUI 的按鈕操作、事務管理。
狀態模式(State)
允許對象在內部狀態改變時改變其行為。
示例:電梯的不同狀態(運行/停止/故障)。
責任鏈模式(Chain of Responsibility)
將請求的發送者和接收者解耦,使多個對象都有機會處理請求。
示例:審批流程(經理→總監→CEO)。
模板方法模式(Template Method)
定義算法的骨架,將某些步驟延遲到子類實現。
示例:沖泡飲料(咖啡 vs 茶的通用步驟)。
迭代器模式(Iterator)
提供一種方法順序訪問聚合對象的元素,而不暴露其內部表示。
示例:Java 的 Iterator 接口。
中介者模式(Mediator)
用一個中介對象來封裝一系列對象之間的交互。
示例:聊天室(用戶不直接通信,通過服務器中轉)。
備忘錄模式(Memento)
捕獲并外部化對象的內部狀態,以便以后恢復。
示例:游戲存檔、撤銷操作。
訪問者模式(Visitor)
將算法與對象結構分離,便于新增操作而不修改類。
示例:對不同類型的文件(PDF/Word)執行格式檢查。
解釋器模式(Interpreter)
定義語言的文法,并解釋該語言中的句子。
示例:SQL 解析、正則表達式引擎。