模板方法(分离)和策略模式之间的区别?

时间:2010-01-04 09:00:49

标签: design-patterns strategy-pattern template-method-pattern

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

任何人都可以看到他的观点,以及“分离”变体与战略模式的不同之处? 我附上了一张包含他书中两种图案的图像(尚未发表)。

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

3 个答案:

答案 0 :(得分:1)

通常,Template方法使用子类来提供各种行为。使用策略,您注入算法对象。在您的示例中,模板(分离)策略之间没有任何有用的区别。鉴于Gamma 书的年龄,引入此在与其他程序员交谈时,充分解释差异的新术语很可能会引起混淆。避免在课外使用它。

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

答案 1 :(得分:1)

我从未听说过模板方法模式的“分离变体”,我同意它看起来非常类似于策略。即使有一些关于界面所有权的理由或者从客户角度如何调用它们,我也很难发现将它们视为不同的模式会有任何好处。

答案 2 :(得分:0)

模板方法:

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

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

      1. 模板方法 使用继承, 策略 使用合成
      2. 不应覆盖基类实现的 模板方法 通过这种方式,算法的结构由超类控制,细节在子类中实现
      3. 策略 将算法封装在接口后面,这使我们能够在运行时更改算法。多种策略为接口提供不同的实现。
      4. 查看Journaldev Template methodStrategy文章,以便更好地理解sourcemaking文章。