GoF設計模式-23大設計模式(表格)-程式設計師必備+必背
在GoF經典著作《設計模式:可複用面向物件軟體的基礎》中一共描述了23種設計模式。
《Design Patterns:Elements of Reusable Object-Oriented Software》,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著(Addison-Wesley,1995)。
這幾位作者常被稱為"四人組(Gang of Four)",而這本書也就被稱為"四人組(或 GoF)"書。
表一、GoF的23種設計模式一覽表
範圍 目的 |
建立型模式*5 Creational |
結構型模式*7 Structural |
行為型模式*11 Behavioral |
類模式 |
工廠方法模式 |
(類)介面卡模式 |
直譯器模式 模板方法模式 |
物件模式 |
抽象工廠模式 建造者模式 原型模式 單例模式 |
(物件)介面卡模式 橋接模式 組合模式 裝飾模式 外觀模式 享元模式 代理模式
|
職責鏈模式 命令模式 迭代器模式 中介者模式 備忘錄模式 觀察者模式 狀態模式 策略模式 訪問者模式 |
表二、GoF的23種設計模式簡要說明
模式類別 |
模式名稱 |
模式說明 |
建立型模式*5 Creational Pattern |
抽象工廠模式 Abstract Factory Pattern |
提供一個建立一系列相關或者相互依賴的物件的介面,而無需指定它們具體的類 |
建造者模式 Builder Pattern |
將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示 |
|
工廠方法模式 Factory Method Pattern |
定義一個用於建立物件的型別,但是讓子類決定將哪一個類例項化;工廠方法模式讓一個類的例項化延遲到子類 |
|
原型模式 Prototype Pattern |
使用原型例項指定待建立物件的型別,並且通過複製這個原型來建立新的類 |
|
單例模式 Singleton Pattern |
確保一個類只有一個例項,並提供一個全域性訪問點來訪問這個例項 |
|
結構型模式*7 Structural Pattern |
介面卡模式 Adapter Pattern |
將一個類的介面轉換成客戶希望的另一個介面,介面卡模式讓那些介面不相容的類可以一起工作; |
橋接模式 Bridge Pattern |
將抽象部分與它的實現部分解耦,使得兩者都能夠獨立變化 |
|
組合模式 Composite Pattern |
組合多個物件形成樹形結構以表示具有部分-整體關係的層次結構,組合模式讓客戶端可以統一對待單個物件的組合物件; |
|
裝飾模式 Decorator Pattern |
動態的給一個物件增加一些額外的職責。就擴充套件功能而言,裝飾模式提供了一種比使用子類更加靈活的替代方案; |
|
外觀模式 Facade Pattern |
為子系統中的一組介面提供一個統一的入口。外觀模式定義了一個高層介面,這個介面使得這一子系統更容易使用 |
|
享元模式 Flyweight Pattern |
運用共享技術有效地支援大量細粒度物件的複用 |
|
代理模式 Proxy Pattern |
給某一個物件提供一個代理或佔位符,並由代理物件來控制對原有物件的訪問 |
|
行為型模式*11 Behavioral Pattern |
職責鏈模式 Chain of Responsibility Pattern |
避免將一個請求的傳送者與接收者耦合在一起,讓多個物件都有機會處理請求;將接收請求的物件連線成一條鏈,並且沿著這條鏈傳遞請求,直到有一個物件能夠處理它為止 |
命令模式 Command Pattern |
將一個請求封裝為一個物件,從而可用不同的請求對客戶進行引數化,對請求排隊或者記錄請求日誌,以及支援可撤銷的操作 |
|
直譯器模式 Interpreter Pattern |
給定一個語言,定義它的文法的一種表示,並定義一個直譯器,這個直譯器用該表示來解釋語言中的子句 |
|
迭代器模式 Iterator Pattern |
提供一種方法順序訪問一個聚合物件中的各個元素,而又不用暴露該物件的內部表示 |
|
中介者模式 Mediator Pattern |
定義一個物件來封裝一系列物件的互動;中介者模式使各物件之間不需要顯式的相互引用,從而使其耦合鬆散,而且讓你可以獨立的改變他們之間的互動 |
|
備忘錄模式 Memento Pattern |
在不破壞封裝的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態,這樣可以在以後將物件恢復到原先儲存的狀態 |
|
觀察者模式 Observer Pattern |
定義物件之間的一種一對多依賴關係,使得每當一個物件狀態發生改變時,其相關依賴物件皆得到通知並被自動更新 |
|
狀態模式 State Pattern |
允許一個物件在其內部狀態改變時改變它的行為,物件看起來似乎修改了它的類 |
|
策略模式 Strategy Pattern |
定義一系列演算法,將每一個演算法封裝起來,並讓它們可以相互替換,策略模式讓演算法可以獨立於使用它的客戶變化 |
|
模板方法模式 Template Method Pattern |
定義一個操作中演算法的框架,而將一些步驟延遲到子類中;模板方法模式使得子類可以不改變一個演算法的結構,即可重新定義該演算法的某些特定步驟 |
|
訪問者模式 Visitor Pattern |
表示一個作用於某物件結構中的各個元素的操作;訪問者模式讓你可以在不改變各個元素的類的前提下定義用於這些元素的新操作 |