關於 Design Pattern 本篇將討論以下幾個問題
1. 什麼是 Design Pattern?
2. Design Pattern 的分類?
3. 什麼是 UML?
4. 本系列文必學的 UML
1. 什麼是 Design Pattern?
在軟體工程中,設計模式(design pattern)是對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案。 by wikipedia
一般在學習 Design Pattern 都是依照四人幫(Gang of Four, GoF)於 1994 年出版的書籍(Design Patterns: Elements of Reusable Object-Oriented Software)內容為主,封面如下圖。
2. Design Pattern 的分類?
Design Patterns 書中的 23 種設計模式主要分為三大類:
- 創建型 (Creational Patterns)
- 結構型 (Structural Patterns)
- 行為型 (Behavioral Patterns)
創建型 (Creational Patterns)
Patterns | 說明 |
---|---|
Abstract Factory 抽象工廠 | Creates an instance of several families of classes |
Builder 建造者 | Separates object construction from its representation |
Factory Method 工廠方法 | Creates an instance of several derived classes |
Prototype 原型 | A fully initialized instance to be copied or cloned |
Singleton 單例 | A class of which only a single instance can exist |
結構型 (Structural Patterns)
Patterns | 說明 |
---|---|
Adapter 轉接器 | Match interfaces of different classes |
Bridge 橋接 | Separates an object’s interface from its implementation |
Composite 組合 | A tree structure of simple and composite objects |
Decorator 裝飾者 | Add responsibilities to objects dynamically |
Facade 門面 | A single class that represents an entire subsystem |
Flyweight 享元 | A fine-grained instance used for efficient sharing |
Proxy 代理 | An object representing another object |
行為型 (Behavioral Patterns)
Patterns | 說明 |
---|---|
Chain of Responsibility 責任鏈 | A way of passing a request between a chain of objects |
Command 命令 | Encapsulate a command request as an object |
Interpreter 直譯器 | A way to include language elements in a program |
Iterator 迭代器 | Sequentially access the elements of a collection |
Mediator 中介者 | Defines simplified communication between classes |
Memento 備忘錄 | Capture and restore an object's internal state |
Observer 觀察者 | A way of notifying change to a number of classes |
State 狀態 | Alter an object's behavior when its state changes |
Strategy 策略 | Encapsulates an algorithm inside a class |
Template Method 樣板方法 | Defer the exact steps of an algorithm to a subclass |
Visitor 訪問者 | Defines a new operation to a class without change |
3. 什麼是 UML?
統一塑模語言(Unified Modeling Language, UML),一種標準化的建模語言,例如以標準化的圖形來表達一個系統的結構與內部各原件之間關係。
將抽象的概念畫作圖形來說明,由於所使用的圖形有一套標準化的規則,所以儘管沒有文字敘述的輔助依然能讓人理解。
4. 本系列文必學的 UML
由於 UML 博大精深,並非三言兩語就能讓人理解透徹,但圖形化的 UML 對於理解 Design Pattern 的抽象概念有著莫大的幫助,所以在此僅介紹 Design Pattern 會使用到的部分。
首先 Design Pattern 所使用的 UML 類型稱為類別圖型(Class Diagrams)
圖型
- 第一層:class 名稱
- 第二層:class 中包含的屬性
- 第三層:class 中包含的方法或行為
線條 & 箭頭
- 實線 + 箭頭(Association):類別間相互關聯,箭頭表示方向性
- 虛線 + 箭頭(Dependency):類別間依賴關係,箭頭表示方向性
- 實線 + 空心三角形(Generalization):類別間繼承關係,空心三角形指向父類別
- 虛線 + 空心三角形(Implementaition):實作與 Interface 間關係,空心三角形指向 Interface
- 實線 + 空心菱形(Shared Aggregation):空心菱形端類別可包含箭頭端類別(e.g. 學校可包含學生)
- 實線 + 實心菱形(Composite Aggregation):實心菱形端類別為部分,箭頭端類別為整體(e.g. 整體→鳥,部分→翅膀)