二十三種設計模式是軟件開發中用于解決常見問題的經典解決方案,它們由 Erich Gamma 等四位作者在《設計模式:可復用面向對象軟件的基礎》一書中提出。這些模式分為三大類:創建型模式、結構型模式 和 行為型模式。
1. 創建型模式(Creational Patterns)
這些模式關注對象的創建機制,旨在使系統在創建對象時不依賴于具體的類,從而降低耦合度。
- 單例模式(Singleton Pattern):確保一個類只有一個實例,并提供全局訪問點。
- 工廠方法模式(Factory Method Pattern):定義一個創建對象的接口,但由子類決定實例化哪個類。
- 抽象工廠模式(Abstract Factory Pattern):提供一個創建一系列相關或相互依賴對象的接口,而無需指定具體類。
- 建造者模式(Builder Pattern):將一個復雜對象的構建過程與其表示分離,使得同樣的構建過程可以創建不同的表示。
- 原型模式(Prototype Pattern):通過復制現有的實例來創建新對象,而不是通過構造函數。
2. 結構型模式(Structural Patterns)
這些模式關注類和對象的組合,旨在通過繼承和接口實現更好的結構。
- 適配器模式(Adapter Pattern):將一個類的接口轉換成客戶希望的另一個接口。
- 橋接模式(Bridge Pattern):將抽象部分與實現部分分離,使它們可以獨立變化。
- 組合模式(Composite Pattern):將對象組合成樹形結構以表示“部分-整體”的層次結構。
- 裝飾器模式(Decorator Pattern):動態地給對象添加新的功能。
- 外觀模式(Facade Pattern):為子系統中的一組接口提供一個統一的接口。
- 享元模式(Flyweight Pattern):通過共享技術來有效地支持大量細粒度的對象。
- 代理模式(Proxy Pattern):為其他對象提供一個代理以控制對這個對象的訪問。
3. 行為型模式(Behavioral Patterns)
這些模式關注對象之間的交互和職責分配,旨在使對象之間的通信更加靈活。
- 責任鏈模式(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):表示一個作用于某對象結構中的各元素的操作,它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。