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

Design patterns 模板法(分离)和策略模式之间的区别?,design-patterns,strategy-pattern,template-method-pattern,Design Patterns,Strategy Pattern,Template Method Pattern,我的老师是一个非常好的老师,我倾向于理解他的观点,但这一点让我难以理解。 他用两种变体解释了模板方法 -统一:标准变量,由一个抽象类和一些抽象方法组成,这些抽象方法定义了其他固定算法的变量部分。 -分离:他自己的变体(我想?),其中一个类包含templateMethod(),并使用对接口的委托来改变算法的各个部分,在我看来,这与策略模式完全相同 有人能看出他的观点是什么,以及“分离”变体与战略模式有何不同吗? 我附上了一张图片,其中包含了他书(尚未出版)中的两种模式 在常见用法中,模板方法使用子

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

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


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

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

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

< P> <强>模板方法:< /强>

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

  • 这是一种行为模式
  • 这是基于授权
  • 它通过修改方法行为来改变对象的本质
  • 它用于在算法系列之间切换
  • 它在运行时更改对象的行为。将从一系列算法中选择一个算法
  • 基本区别。

  • 模板方法使用继承,而策略使用组合
  • 不应重写基类实现的模板方法。这样,算法的结构由超类控制,细节在子类中实现
  • 策略将算法封装在一个接口后面,它使我们能够在运行时更改算法。多种策略为接口提供了不同的实现
    看看Journaldev和文章,以便更好地理解文章

    你有老师的许可证可以公开发表这些页面并讨论它们吗?阅读了问题和答案后,我想我同意这听起来像是另一个名字的策略模式。你问过你的老师这件事吗?我很想听听他说什么。你是对的,但我想问的是模板方法的“分离”变体。我完全同意你关于“统一”的说法,但与战略相比,你如何理解“分离”的说法这个变体中没有受保护的方法或抽象类。我认为你的老师已经制定了“分离”形式,并且没有区别。如果有差异,那就非常好,我认为你不必担心。我会相应地更新我的答案。我的老师这样描述肯定是有原因的。我的印象是,我们需要能够在考试中解释这一点,我发现这很奇怪,因为没有明显的(不仅仅是细微的)区别。区别可能在于它们的使用方式吗?就像,模板方法永远不会从客户机调用,而策略恰恰意味着要从客户机调用,以便他可以更改策略?这有意义吗?