iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 2
2

開始看 Design Patterns/Architectural Patterns 之前,我們先來建立一些基本知識。

SOLID 原則

物件導向的世界中,有所謂的 SOLID Principles。這五項原則是 Design Patterns 的基礎,暸解他們就能更清楚為何這些模式會這樣設計。

  1. Single Responsibility Principle 單一職責原則: 一個類別應該只有一個能夠使它變動的原因。也就是說,一個類別只需要做(並且做好)一件事就好了。
  2. Open/Closed Principle 開放封閉原則: 類別應該允許擴增(open for extension),但是禁止修改(closed for modification)。這是確保當需求有異動時,所做的改變不會讓現有的程式碼出現錯誤。
  3. Liskov Substitution Principle 里氏替換原則: 當程式中使用一個類別,那麼將它替換成它的子類別不應該破壞程式原有的行為。這樣我們在寫程式的時候,可以先宣告父類別的物件,而在 runtime 時指到子類別的實例—跟物件導向的多型 polymorphism 特性有密切相關。
  4. Interface Segregation Principle 介面隔離原則: 客戶不應該依賴於他們不會使用到的方法。假設今天有一個有十個方法的類別,A 客戶(client)只需要用到 其中的第三、四、五個方法,那麼不應該將十個類別都傳給客戶,而是開一個只接了三、四、五方法的介面,再讓客戶使用它。如此可以避免不相干的功能異動影響到客戶端的程式碼。
  5. Dependency Inversion Principle 依賴反轉原則: 高階模組/類別(high-level classes/modules)不應該依賴於低階模組/類別(low-level modules/classes);兩者皆應該依賴於一抽象介面(abstraction)。而抽象介面不應該依賴於實作細節(implementation details)。實作細節應該依賴於抽象介面。這樣當我們今天必須要改變、更換低階模組時,也不會影響到高階模組的運作。這其實就是所謂的「Program to an interface, not an implementation」。

Design Patterns 分類方式

GoF 的 Design Patterns 將 23 種 Design Patterns 依照目的分成三群:Creational Patterns 創建型模式, Structural Patterns 結構型模式, Behavioural Patterns 行為型模式。以下列出每個模式分別歸屬的種類。而前面中括號 [] 中的數字代表這個 pattern 會在第幾天被介紹。

Creational Patterns 創建型模式

創建型模式是跟物件創立(object creation)的過程有關的模式。

  • [03] Factory Method
  • [04] Builder
  • [11] Prototype
  • [12] Singleton
  • [15] Abstract Method

Structural Patterns 結構型模式

結構型模式是跟類別/物件的組成(classes/objects composition)有關的模式。

  • [05] Composition
  • [06] Decorator
  • [08] Adapter
  • [13] Proxy
  • [17] Bridge
  • [18] Facade
  • [19] Flyweight

Behavioural Patterns 行為型模式

行為型模式是跟類別/物件之間的互動與職責分配有關的模式。

  • [07] Observer
  • [09] Template Method
  • [10] Strategy
  • [14] Interpreter
  • [16] Chain of Responsibility
  • [20] Command
  • [21] Iterator
  • [22] Mediator
  • [23] Memento
  • [24] Null Object
  • [25] State
  • [26] Visitor

關於 UML

在接下來每個模式的介紹中,我們都會使用 UML (Unified Modeling Language) 來表達類別/物件之間的關係。如果你從沒看過 UML,或是對 UML 很不熟,沒有關係,我們也不是專家XD(但是保證裡面的圖都是正確的!)這邊提供一個簡易的箭頭表示方法來做個備忘小抄。

UML 關係圖
(source: Wikipedia)

就這樣

明天就會開始進入 Design Patterns 了。第一篇會是工廠方法 Factory Method。敬請期待!


上一篇
混沌初開:學習設計模式(與更多)前的一些嘮叨
下一篇
[Design Pattern] Factory Method 工廠方法
系列文
什麼?又是/不只是 Design Patterns!?32

尚未有邦友留言

立即登入留言