# 1. Design Pattern ###### tags: `DesignPatterns` ## 關於 Design Pattern 本篇將討論以下幾個問題 > ### 1. 什麼是 Design Pattern? > ### 2. Design Pattern 的分類? > ### 3. 什麼是 UML? > ### 4. 本系列文必學的 UML --- ## 1. 什麼是 Design Pattern? 在軟體工程中,設計模式(design pattern)是對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案。 by [wikipedia](https://ppt.cc/fMqtrx) 一般在學習 Design Pattern 都是依照四人幫(Gang of Four, GoF)於 1994 年出版的書籍(Design Patterns: Elements of Reusable Object-Oriented Software)內容為主,封面如下圖。  --- ## 2. Design Pattern 的分類? Design Patterns 書中的 23 種設計模式主要分為三大類: 1. 創建型 (Creational Patterns) 2. 結構型 (Structural Patterns) 3. 行為型 (Behavioral Patterns) #### 創建型 (Creational Patterns) | Patterns | 說明 | |---------|---------| | [Abstract Factory 抽象工廠](https://waynecheng.coderbridge.io/2021/01/10/Creational-02-AbstractFactory/) | Creates an instance of several families of classes | | [Builder 建造者](https://waynecheng.coderbridge.io/2021/01/11/Creational-03-Builder/) | Separates object construction from its representation | | [Factory Method 工廠方法](https://waynecheng.coderbridge.io/2021/01/10/Creational-01-FactoryMethod/) | Creates an instance of several derived classes | | [Prototype 原型](https://waynecheng.coderbridge.io/2021/01/12/Creational-04-Prototype/) | A fully initialized instance to be copied or cloned | | [Singleton 單例](https://waynecheng.coderbridge.io/2021/01/13/Creational-05-Singleton/) | A class of which only a single instance can exist | #### 結構型 (Structural Patterns) | Patterns | 說明 | |---------|---------| | [Adapter 轉接器](https://waynecheng.coderbridge.io/2021/01/14/Structural-06-Adapter/) | Match interfaces of different classes | | [Bridge 橋接](https://waynecheng.coderbridge.io/2021/01/16/Structural-07-Bridge/) | Separates an object’s interface from its implementation | | [Composite 組合](https://waynecheng.coderbridge.io/2021/01/16/Structural-08-Composite/) | A tree structure of simple and composite objects | | [Decorator 裝飾者](https://waynecheng.coderbridge.io/2021/01/17/Structural-9-Decorator/) | Add responsibilities to objects dynamically | | [Facade 門面](https://waynecheng.coderbridge.io/2021/01/18/Structural-10-Facade/) | A single class that represents an entire subsystem | | [Flyweight 享元](https://waynecheng.coderbridge.io/2021/01/19/Structural-11-Flyweight/) | A fine-grained instance used for efficient sharing | | [Proxy 代理](https://waynecheng.coderbridge.io/2021/01/20/Structural-12-Proxy/) | An object representing another object | #### 行為型 (Behavioral Patterns) | Patterns | 說明 | |---------|---------| | [Chain of Responsibility 責任鏈](https://waynecheng.coderbridge.io/2021/01/21/Behavioral-13-ChainOfResponsibility/) | A way of passing a request between a chain of objects | | [Command 命令](https://waynecheng.coderbridge.io/2021/01/22/Behavioral-14-Command/) | Encapsulate a command request as an object | | [Interpreter 直譯器](https://waynecheng.coderbridge.io/2021/01/23/Behavioral-15-Interpreter/) | A way to include language elements in a program | | [Iterator 迭代器](https://waynecheng.coderbridge.io/2021/01/24/Behavioral-16-Iterator/) | Sequentially access the elements of a collection | | [Mediator 中介者](https://waynecheng.coderbridge.io/2021/01/25/Behavioral-17-Mediator/) | Defines simplified communication between classes | | [Memento 備忘錄](https://waynecheng.coderbridge.io/2021/01/26/Behavioral-18-Memento/) | Capture and restore an object's internal state | | [Observer 觀察者](https://waynecheng.coderbridge.io/2021/01/27/Behavioral-19-Observer/) | A way of notifying change to a number of classes | | [State 狀態](https://waynecheng.coderbridge.io/2021/01/28/Behavioral-20-State/) | Alter an object's behavior when its state changes | | [Strategy 策略](https://waynecheng.coderbridge.io/2021/01/29/Behavioral-21-Strategy/) | Encapsulates an algorithm inside a class | | [Template Method 樣板方法](https://waynecheng.coderbridge.io/2021/01/30/Behavioral-22-TemplateMethod/) | Defer the exact steps of an algorithm to a subclass | | [Visitor 訪問者](https://waynecheng.coderbridge.io/2021/01/31/Behavioral-23-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. 整體→鳥,部分→翅膀) --- ## 總結 ### 本系列定位在讓初學 Design Pattern 的人能夠理解每個 Pattern 的基本架構與概念,當遇到實際情況時,能夠以本系列提供的情境做為發想,再進一步套用至複雜情境,將 Design Pattern 化作能上陣殺敵的武器。 ### Design Pattern 是為了簡化問題而產生的解決方案,不使用一樣能寫出功能相同的程式,但初學時就盡其所能的套用 Design Pattern 可能導致過度設計,造成系統複雜化與後續維護、擴充上的困難,不可不慎。 --- ## 新手上路,若有錯誤還請告知,謝謝
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up