2009年8月6日

[Design Patterns] 論 Template Method 與 Strategy (上)

昨天在 Plurk 上面回了 fcamel 一段話(*1):
我以為 "template method" 改用組合就是 "strategy" 了 :p
不過我想會分成兩種 pattern ㄧ部分也是因為靜態語言的特性使然吧
由於 Plurk 會限制字數,不太適合發表長篇大論。所以我打算透過這系列文章把想說的東西表達清楚一點,並且討論一下這兩個 pattern。

Design Patterns 對這兩個 pattern 的描述如下:
Template method
defines the skeleton of an algorithm as an abstract class, allowing its subclasses to provide concrete behavior.
Strategy
allows one of a family of algorithms to be selected on-the-fly at runtime.
在這樣的定義下,如果採用組合(composition)的形式,自然不會是 Template Method Pattern。而不論在靜態或動態語言中組合關係都是可以在執行時期才決定的。所以我認為(在上述的定義下):「"template method" 改用組合就是 "strategy" 了」。

在靜態語言中,類別的內容必須在執行時期前就確定。因此提供 Template Method Pattern 中具體行為的子類別自然不會落在 Strategy Pattern 的範疇中。反之,由於動態語言允許執行時期修改類別定義,而讓一個類別有可能同時被用來實現這兩個 pattern。這是我回文後半段所沒說清楚的部分。

當然,前面論述採用了比較狹義的 pattern 定義;而且我只討論了 pattern 的形式,而忽略套用 pattern 的動機(也就是 pattern 所想解決的問題)。但這些已經超過原本 Plurk 回文想說的內容,所以我將這部分留在後續文章中討論。(謎之音:擺明就是要拖稿嘛)


1. 這則 plurk 在

沒有留言:

張貼留言