一開始先來閒聊一下,由於限量最近在思考一些物件設計的問題,卻遲遲無法決定,偶然想到碩班時學的 Design Pattern,說來慚愧,或許是沒完全掌握整個Design Pattern,在設計時常常陷入不知道要不要套用與選用哪個的迷惘中,所以限量決定重啟 Design Pattern 之路。
在建築的領域中,建築師透過不斷的累積設計經驗,而產生出設計藍圖(Pattern),後人根據這些Pattern,為建築物進行適當良好的設計。軟體也是有一套Design Pattern,由 Gang of Four (作者們,因為作者四人是好麻吉)萃取他們以往設計各種軟體架構的經驗,歸納了24種常用的狀況下所適合的物件設計方式,這Design Pattern可說是所有程式設計師必讀的聖經。
Design Pattern根據使用的目的可分為三類,根據樣式設計的範圍可分為兩種。
下表為 Design Pattern 分類表:
在建築的領域中,建築師透過不斷的累積設計經驗,而產生出設計藍圖(Pattern),後人根據這些Pattern,為建築物進行適當良好的設計。軟體也是有一套Design Pattern,由 Gang of Four (作者們,因為作者四人是好麻吉)萃取他們以往設計各種軟體架構的經驗,歸納了24種常用的狀況下所適合的物件設計方式,這Design Pattern可說是所有程式設計師必讀的聖經。
Design Pattern根據使用的目的可分為三類,根據樣式設計的範圍可分為兩種。
使用目的
- Creational: 與建立物件相關的設計
- Structural: 處理物件與物件之間關係組合的相關設計
- Behavioral: 物件本身的一些行為相關設計
設計範圍
- Class: Class與其Sub-Class之間的關係,為靜態作用
- 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 的大略介紹,接下來將開始為每個 Pattern 做各自的解說與使用。
- 首先,先考慮哪個 Design Pattern 可能適用於解決這個問題。
- 接著再看看每個 Design Pattern 所要解決的問題或解法是不是與這個符合這個問題的需求,這個部分可以查看 Gang of Four 書中每個Pattern章節中的 Intent Section。
- 然後搜尋與此Pattern相關聯的其他Pattern,看看彼此之間的相異與相似部分,或如何結合其他樣式,這個部分可從書中Related Section中尋找。
- 再來研究每個相關樣式的詳細說明與實作。
- 再過來評估如果採用該設計樣式後,未來修改時會不會導致整個重新設計的情況發生,此部分可參考書中 Common cause of redesign 的一些判斷準則。
- 最後找出這個設計中那些部分是可能的變數之後,再實作 Pattern。
以上為 Design Pattern 的大略介紹,接下來將開始為每個 Pattern 做各自的解說與使用。
留言
張貼留言