l

2010年6月24日 星期四

Design Patterns 分成三大類

06/24 22:47~23:55

今天 Teddy 有點累,談點簡單一點的主題:『Design Patterns 的分類』。

鄉民甲:我知道,就是 Creational, Structural, 和 Behavioral 這三類的啦。

全錯。如果是這三類,鄉民自己看 GoF 的書就好了,用不著 Teddy 出馬。Teddy 要介紹的這三類,是出自於 Wolfgang Pree 所撰寫的 Design Patterns for Object-Oriented Software Development 這本書中第 98 頁(沒看過吧,嘿嘿嘿)。

  • Patterns relying on abstract coupling
  • Patterns based on recursive structures
  • Other patterns
GoF 的 Design Patterns 這本書中大多數 patterns 都是屬於第一類的,例如 State, Factory Method, Observer, Bridge, Builder, Command, Visitor, Interpreter, Mediator, Adapter, Prototype, Proxy,Strategy。手邊有書的人翻開看一下,或是看下圖,Observer pattern 中的 Subject 和 Observer 是有 coupling,也就是彼此相依。但是,軟體設計最基本的兩個法則其一就是要降低 coupling(另一個是要提高 cohesion),但是 coupling 又不可能降低到零,否則所有物件彼此都沒任何關係,玩不下去了。為了求得平衡點,這個關係就要想辦法搞成『有點黏,又不會太黏』,於是乎誕生了
『abstract coupling』。要 coupling,OK,但是只能有『抽象關係(精神外遇?)』,不能有 肉體耦合 實做耦合(implementation coupling)。

有準時收看 Teddy 部落格的鄉民們,有沒有發現,這就是『program to an interface,  not an implementation』的例子啦。




第二類,recursive structures 有 Composite, Chain of Responsibility, Decorator。應該不用再多做解釋了,這一類的 patterns 就是有遞迴結構。



第三類,其他。ㄟ,通常分類到最後分不下去了都會跑出這一類。屬於這一類的有 Abstract Factory, Flyweight, Singleton, Template Method。

至於知道這些分類有什麼用?至少改天鄉民們想自創武功的時候,可以從『abstract coupling』和『recursive structures』作為出發點來思考,這總比 Creational, Structural, 和 Behavioral 分類要具體一點吧。

***

友藏內心獨白:還有另外一個用途就是可以拿來寫部落格啊。又混過一篇...safe。

沒有留言:

張貼留言