1. Design Pattern


Posted by WayneCheng on 2021-01-09

關於 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 種設計模式主要分為三大類:

  1. 創建型 (Creational Patterns)
  2. 結構型 (Structural Patterns)
  3. 行為型 (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. 整體→鳥,部分→翅膀)

總結

本系列定位在讓初學 Design Pattern 的人能夠理解每個 Pattern 的基本架構與概念,當遇到實際情況時,能夠以本系列提供的情境做為發想,再進一步套用至複雜情境,將 Design Pattern 化作能上陣殺敵的武器。

Design Pattern 是為了簡化問題而產生的解決方案,不使用一樣能寫出功能相同的程式,但初學時就盡其所能的套用 Design Pattern 可能導致過度設計,造成系統複雜化與後續維護、擴充上的困難,不可不慎。


新手上路,若有錯誤還請告知,謝謝


#designpattern







Related Posts

React Form: Redux Form vs React Final Form vs Formik and Yup

React Form: Redux Form vs React Final Form vs Formik and Yup

[IIS] 拒絕存取路徑 & 開啟資料夾權限

[IIS] 拒絕存取路徑 & 開啟資料夾權限

[Note] JS: Hoisting & TDZ

[Note] JS: Hoisting & TDZ


Comments