我以為 "template method" 改用組合就是 "strategy" 了 :p由於 Plurk 會限制字數,不太適合發表長篇大論。所以我打算透過這系列文章把想說的東西表達清楚一點,並且討論一下這兩個 pattern。
不過我想會分成兩種 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.
在靜態語言中,類別的內容必須在執行時期前就確定。因此提供 Template Method Pattern 中具體行為的子類別自然不會落在 Strategy Pattern 的範疇中。反之,由於動態語言允許執行時期修改類別定義,而讓一個類別有可能同時被用來實現這兩個 pattern。這是我回文後半段所沒說清楚的部分。
當然,前面論述採用了比較狹義的 pattern 定義;而且我只討論了 pattern 的形式,而忽略套用 pattern 的動機(也就是 pattern 所想解決的問題)。但這些已經超過原本 Plurk 回文想說的內容,所以我將這部分留在後續文章中討論。(謎之音:擺明就是要拖稿嘛)
1. 這則 plurk 在此。
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。