Nov. 10 17:48~18:20; 22:08~22:59
格式
GoF格式是很多軟體開發人員第一次接觸pattern所看到的格式,也是《Design Patterns》書中所採用的格式。這個格式的元素很多,以下是《Design Patterns》對於GoF格式的說明:
- Pattern名稱與分類:例如Proxy pattern屬於Object Structural這個分類。
- Intent(意圖):一個小段落(1~3個句子)用來表達這個模式的用途、它存在的目的、理由、它解決什麼設計問題。
- Also Known As(別名):例如Proxy又稱為Surrogate,Adapter又稱為Wrapper。
- Motivation(動機):敘述一個特定的設計問題情境,說明pattern內的類別與物件如何解決這個問題。
- Applicability(適用性):這個pattern在何種情況下可以被套用。
- Structure(結構):一個用來表達pattern內部類別或物件關係的圖表,通常畫成class diagram或object diagram(GoF Design Patterns出版的時候還沒有UML,所以書中的class diagrm採用OMT格式,和後來的UML很類似)。
- Participants(參與者):形成該pattern的類別或物件所變演的角色與責任,例如Chain Of Responsibility模式的參與者有Handler、ConcreteHandler、Client,它們各扮演不同的責任一起完成Chain Of Responsibility模式。
- Collaborations(合作方式):Participants如何一起合作完成其所擔負的責任。
- Consequences(結果):套用pattern之後的效果,有些偏正面、有些偏負面。例如吃感冒藥的結果可能是:(1)退燒;(2)止咳;(3)不流鼻水;(4)嗜睡。前三者比較算正面的解果,最後一點則比較傾向副作用。
- Implementation(實做):實作pattern的陷阱、技巧、應注意技術事項,以及和程式語言相關的問題。
- Simple Code(範例程式):用C++或Smalltalk寫成的範例成是片段,採用GoF格式的鄉民可以用自己喜歡的語言做為範例程式。
- Known Uses(知名案例):在真實世界的系統中採用該pattern的例子,至少包含兩個來自於不同領域的範例。
- Related Patterns(相關模式):列出和該pattern緊密相關的其他模式,以及這些模式之間的重要相異之處。
***
例子
接下來看一個《Design Patterns》書中的例子:Adapter,下列圖片節錄自該書電子檔。
▼Pattern與分類、Intent、Also Known As、Motivation(1、2、3、4)。
▼Applicability與Structure(5、6)。
▼Participants與Collaborations(7、8)。
▼Consequences(9)。
▼Implementation(10)。
▼Sample Code(11)。
▼Known Usea(12)。
▼Related Patterns(13)。
***
許多設計模式或軟體架構模式都採用GoF格式或是其變形格式(也許沒有全部13個元素都使用到)。在這裡Teddy要出兩個問題考考鄉民:
- Alexander格式有很清楚的列出pattern要解決的問題是什麼,但在GoF格式中並沒有Problem這個項目,那麼GoF格式的pattern所要解決什麼問題放在哪一個元素中?
- GoF格式是否弱化了讀者對於Problem的理解而用了更多篇幅在討論Solution上面?
***
友藏內心獨白:問題很重要。
先看過GoF格式後再去看其他書 , 一直都覺得都不太習慣
回覆刪除(不曉得是否因為已經習慣了這本書直接挑明方法的觀點)
最近看了另一本設計模式的解析與活用頗有此感, 感覺對於pattern也還是陌生