1

我的老师是一位非常好的老师,我倾向于理解他的观点,但这一点让我无法理解。他用两种变体解释了模板方法;
- 统一:标准变体,由一个抽象类和一些抽象方法组成,这些抽象方法定义了其他固定算法的变体部分。
- 分离:他自己的变体(我认为?),其中一个类包含 templateMethod() 并使用对接口的委托来改变算法的各个部分,这在我看来与策略模式完全一样。

谁能明白他的观点是什么,以及“分离”变体与策略模式有何不同?
我附上了一张图片,其中包含他书中的两种模式(尚未出版)。

http://img64.imageshack.us/img64/3620/strategytemplate.jpg

4

3 回答 3

1

在常见的用法中,模板方法使用子类来提供不同的行为。使用 Strategy,您可以注入一个算法对象。在您的示例中,模板(分离)策略之间没有有用的区别。鉴于 Gamma等人的书的年代久远,在没有充分解释差异的情况下引入这个新术语很可能会在您与其他程序员交谈时引起混淆。避免在课程之外使用它。

模板允许您访问基类中的受保护成员。策略允许您开发与使用它们的对象更松散耦合的算法,并允许您将相同的算法注入到许多不同类型的对象中。

于 2010-01-04T09:14:34.730 回答
1

我从未听说过模板方法模式的“分离变体”,我同意它看起来与策略极其相似。即使有一些关于接口所有权的推理或者你如何从客户端的角度调用它们,我也几乎没有发现考虑它们不同的模式有什么好处。

于 2010-01-04T09:17:49.577 回答
0

模板方法:

  1. 这是一种行为设计模式
  2. 它用于创建方法存根并将某些实现步骤推迟到子类。它由顺序固定的某些步骤组成。
  3. 它定义了执行算法的步骤,并且可以提供可能对所有或部分子类通用的默认实现。
  4. 超类模板方法调用子类的方法,

策略模式:

  1. 这是一种行为模式
  2. 它基于委托
  3. 它通过修改方法行为来改变对象的内容
  4. 它用于在算法系列之间切换
  5. 它在运行时改变对象的行为。一种算法将从算法族中选择。

基本区别。

  1. 模板方法使用继承,策略使用组合
  2. 基类实现的Template 方法不应被覆盖。这样,算法的结构由超类控制细节在子类中实现
  3. Strategy将算法封装在一个接口后面,它为我们提供了在运行时更改算法的能力。多种策略为接口提供不同的实现。

查看 Journaldev模板方法策略文章,以更好地理解来源制作文章。

于 2016-02-13T17:22:42.730 回答