l

2016年11月10日 星期四

Pattern格式介紹(2):GoF 格式

Nov. 10 17:48~18:20; 22:08~22:59

屏幕截图 2016-11-10 22.58.30

 

格式

GoF格式是很多軟體開發人員第一次接觸pattern所看到的格式,也是《Design Patterns》書中所採用的格式。這個格式的元素很多,以下是《Design Patterns》對於GoF格式的說明:

  1. Pattern名稱與分類:例如Proxy pattern屬於Object Structural這個分類。
  2. Intent(意圖):一個小段落(1~3個句子)用來表達這個模式的用途、它存在的目的、理由、它解決什麼設計問題
  3. Also Known As(別名):例如Proxy又稱為Surrogate,Adapter又稱為Wrapper。
  4. Motivation(動機):敘述一個特定的設計問題情境,說明pattern內的類別與物件如何解決這個問題。
  5. Applicability(適用性):這個pattern在何種情況下可以被套用。
  6. Structure(結構):一個用來表達pattern內部類別或物件關係的圖表,通常畫成class diagram或object diagram(GoF Design Patterns出版的時候還沒有UML,所以書中的class diagrm採用OMT格式,和後來的UML很類似)。
  7. Participants(參與者):形成該pattern的類別或物件所變演的角色責任,例如Chain Of Responsibility模式的參與者有Handler、ConcreteHandler、Client,它們各扮演不同的責任一起完成Chain Of Responsibility模式。
  8. Collaborations(合作方式):Participants如何一起合作完成其所擔負的責任。
  9. Consequences(結果):套用pattern之後的效果,有些偏正面、有些偏負面。例如吃感冒藥的結果可能是:(1)退燒;(2)止咳;(3)不流鼻水;(4)嗜睡。前三者比較算正面的解果,最後一點則比較傾向副作用。
  10. Implementation(實做):實作pattern的陷阱、技巧、應注意技術事項,以及和程式語言相關的問題。
  11. Simple Code(範例程式):用C++或Smalltalk寫成的範例成是片段,採用GoF格式的鄉民可以用自己喜歡的語言做為範例程式。
  12. Known Uses(知名案例):在真實世界的系統中採用該pattern的例子,至少包含兩個來自於不同領域的範例。
  13. Related Patterns(相關模式):列出和該pattern緊密相關的其他模式,以及這些模式之間的重要相異之處。

  ***

例子

接下來看一個《Design Patterns》書中的例子:Adapter,下列圖片節錄自該書電子檔。

▼Pattern與分類、Intent、Also Known As、Motivation(1、2、3、4)。

擷取

 

▼Applicability與Structure(5、6)。

擷取擷取2

 

▼Participants與Collaborations(7、8)。

擷取

 

▼Consequences(9)。

擷取

 

▼Implementation(10)。

擷取

 

▼Sample Code(11)。

擷取

 

▼Known Usea(12)。

擷取

 

▼Related Patterns(13)。

擷取

***

許多設計模式或軟體架構模式都採用GoF格式或是其變形格式(也許沒有全部13個元素都使用到)。在這裡Teddy要出兩個問題考考鄉民:

  1. Alexander格式有很清楚的列出pattern要解決的問題是什麼,但在GoF格式中並沒有Problem這個項目,那麼GoF格式的pattern所要解決什麼問題放在哪一個元素中?
  2. GoF格式是否弱化了讀者對於Problem的理解而用了更多篇幅在討論Solution上面?

***

友藏內心獨白:問題很重要。

1 則留言:

  1. 先看過GoF格式後再去看其他書 , 一直都覺得都不太習慣
    (不曉得是否因為已經習慣了這本書直接挑明方法的觀點)
    最近看了另一本設計模式的解析與活用頗有此感, 感覺對於pattern也還是陌生

    回覆刪除