8

這可能是一個新手問題,因爲我是新設計模式,但我正在研究模板方法和策略DP,他們看起來非常相似。我可以閱讀定義,檢查UML並檢查代碼示例,但對我來說,它看起來像Strategy模式只是使用Template Method模式,但您恰好將它傳遞給對象(即組合)。模板方法和策略設計模式

就此而言,模板方法似乎只是基本的OO繼承。

我錯過了他們區別的一些關鍵方面嗎?我是否缺少一些關於模板方法的知識,使它更多地只是基本的繼承?

注:以前有一篇文章(672083),但它更多的是何時使用它,這種方式可以幫助我更多地使用它,但是我想要對模式本身有效。

回答

9

它基本上都歸結爲語義。策略模式允許您將特定的算法/過程(策略)傳遞給另一個對象,並將使用它。模板方法允許您覆蓋算法的特定方面,同時仍然保持算法的某些方面(保持順序相同,並且始終在開始和結束時完成,例如「模板」)。而繼承則是在數據模型中建模'IS-A'關係的一種方式。

當然,模板方法最容易實現使用繼承(儘管你可以很容易地使用組合,特別是一旦你有函子),戰略模式也常常是模板方法,但語法類似的含義是非常不同的。

+0

+1對於一個很好的簡潔的解釋,並提及構成的繼承 – 2009-06-12 21:24:02

0

Strategy的設計圖案
提供了一種在運行時
(經由對象組合)來交換對象 的算法動態地。

例如,計算訂單處理系統中的價格。
要以不同的方式計算價格,可以支持不同的定價算法 ,以便可以選擇(注入)使用哪種算法並在運行時動態交換。

Template Method 設計圖案
提供一種方式來重新定義 一類的行爲的某些部分在靜態編譯時
(通過子類)。

例如,設計可重用的應用程序(框架)。
該應用程序實現行爲 的通用(不變)部分,以便應用程序的用戶可以編寫子類來重新定義 變體部件以滿足其需要。 但子類作家既不應該能夠改變行爲的不變部分,也不應該改變行爲的結構 (不變部分和變體部分的結構)。