8

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

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

我错过了他们区别的一些关键方面吗?我是否缺少一些关于模板方法的知识,使它更多地只是基本的继承?

注:以前有一篇文章(672083),但它更多的是何时使用它,这种方式可以帮助我更多地使用它,但是我想要对模式本身有效。

回答

9

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

当然,模板方法最容易实现使用继承(尽管你可以很容易地使用组合,特别是一旦你有函子),战略模式也常常是模板方法,但语法类似的含义是非常不同的。

+0

+1对于一个很好的简洁的解释,并提及构成的继承 – 2009-06-12 21:24:02

0

Strategy的设计图案
提供了一种在运行时
(经由对象组合)来交换对象 的算法动态地。

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

Template Method 设计图案
提供一种方式来重新定义 一类的行为的某些部分在静态编译时
(通过子类)。

例如,设计可重用的应用程序(框架)。
该应用程序实现行为 的通用(不变)部分,以便应用程序的用户可以编写子类来重新定义 变体部件以满足其需要。 但子类作家既不应该能够改变行为的不变部分,也不应该改变行为的结构 (不变部分和变体部分的结构)。