8

这可能是一个新手问题,因为我是设计模式的新手,但我正在查看模板方法和策略 DP,它们看起来非常相似。我可以阅读定义、检查 UML 并查看代码示例,但在我看来,策略模式似乎只是使用模板方法模式,但您只是碰巧将它传递给对象(即组合)。

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

我是否错过了他们差异的一些关键方面?我是否遗漏了一些关于模板方法的东西,使其不仅仅是基本继承?

注意:之前有一篇关于此的文章(672083),但更多的是关于何时使用它,这有助于我更多地了解它,但我想验证我对模式本身的想法。

4

2 回答 2

10

这基本上都归结为语义。策略模式允许您将特定算法/过程(策略)传递给另一个对象并使用它。模板方法允许您覆盖算法的特定方面,同时仍然保持它的某些方面相同(保持顺序相同,并让事情总是在开始和结束时完成,例如......“模板”)而继承是在数据模型中建模“IS-A”关系的一种方式。

当然,模板方法最容易使用继承来实现(尽管你也可以很容易地使用组合,尤其是当你有函子时),并且策略模式通常也是模板方法,但语法相似的地方含义却大不相同。

于 2009-06-12T20:50:44.520 回答
1

策略设计模式
提供了一种在运行时
(通过对象组合)动态交换对象算法的方法。

例如,在订单处理系统中计算价格。
为了以不同的方式计算价格,可以支持不同的定价算法,以便可以选择(注入)并在运行时动态交换要使用的算法。

模板方法 设计模式提供了一种在编译时 (通过子类化)
静态地重新定义类的某些部分行为的方法。

例如,设计可重用的应用程序(框架)。
应用程序实现了行为的公共(不变)部分,以便应用程序的用户可以编写子类来重新定义变体部分以满足他们的需要。但是子类编写者既不能改变行为的不变部分,也不能改变行为的结构(不变部分和变体部分的结构)。

于 2015-02-21T19:47:19.200 回答