Design Pattern (G4) - 淺談 Design Pattern

一開始先來閒聊一下,由於限量最近在思考一些物件設計的問題,卻遲遲無法決定,偶然想到碩班時學的 Design Pattern,說來慚愧,或許是沒完全掌握整個Design Pattern,在設計時常常陷入不知道要不要套用與選用哪個的迷惘中,所以限量決定重啟 Design Pattern 之路。

在建築的領域中,建築師透過不斷的累積設計經驗,而產生出設計藍圖(Pattern),後人根據這些Pattern,為建築物進行適當良好的設計。軟體也是有一套Design Pattern,由 Gang of Four (作者們,因為作者四人是好麻吉)萃取他們以往設計各種軟體架構的經驗,歸納了24種常用的狀況下所適合的物件設計方式,這Design Pattern可說是所有程式設計師必讀的聖經。

Design Pattern根據使用的目的可分為三類,根據樣式設計的範圍可分為兩種。

使用目的

  1. Creational: 與建立物件相關的設計
  2. Structural: 處理物件與物件之間關係組合的相關設計
  3. Behavioral: 物件本身的一些行為相關設計

設計範圍

  1. Class: Class與其Sub-Class之間的關係,為靜態作用
  2. Object: 在執行時其中,作用於物件的Instance之間

下表為 Design Pattern 分類表:


Purpose
Creational
Structural
Behavioral
Scope
Class
Factory Method
Adapter(class)
Interpreter
Template Method
Object
Abstract Factory
Adapter(object)
Builder
Bridge
Command
Prototype
Iterator
Mediator

Facade
Mememto

Flyweight

Proxy
State




Visitor

那麼,如果將 Design Pattern 背得滾瓜爛熟之後,遇到真正實作時要怎麼去判斷是否要使用,並選擇適合的 Design Pattern ? 按照 Gang of Four 那本聖經上的解釋,有一套SOP可以Follow:

  • 首先,先考慮哪個 Design Pattern 可能適用於解決這個問題。
  • 接著再看看每個 Design Pattern 所要解決的問題或解法是不是與這個符合這個問題的需求,這個部分可以查看 Gang of Four 書中每個Pattern章節中的 Intent Section。
  • 然後搜尋與此Pattern相關聯的其他Pattern,看看彼此之間的相異與相似部分,或如何結合其他樣式,這個部分可從書中Related Section中尋找。
  • 再來研究每個相關樣式的詳細說明與實作。
  • 再過來評估如果採用該設計樣式後,未來修改時會不會導致整個重新設計的情況發生,此部分可參考書中 Common cause of redesign 的一些判斷準則。
  • 最後找出這個設計中那些部分是可能的變數之後,再實作 Pattern。

以上為 Design Pattern 的大略介紹,接下來將開始為每個 Pattern 做各自的解說與使用。

留言