模板方法(分隔)和策略模式之间的区别?
-
22-09-2019 - |
题
我的老师是一个非常好的老师,我倾向于理解他的观点,但是这只是我的脑海。他在两个变体中解释了模板方法。
- 统一:由一个抽象类组成的标准变体,其中一些抽象方法定义了原本固定算法的变体部分。
- 分离:他自己的变体(我想?),其中一类包含TemplateMethod(),并使用委托到接口来改变算法的各个部分,在我看来,这与策略模式完全一样。
谁能看到他的观点是什么,以及“分离”变体与策略模式有何不同?
我附上了一个包含他书中两种模式的图像(尚未出版)。
解决方案
我从未听说过模板方法模式的“分离变体”,我同意它看起来与策略非常相似。即使对界面所有权或从客户的角度调用它们的方式有一些理由,我也几乎没有任何好处可以考虑它们不同的模式。
其他提示
在常见用法中,模板方法使用 子类 提供各种行为。通过策略,您 注入 算法对象。在您的示例中,没有任何有用的区别 模板(分隔) 和 战略。 考虑到伽玛的年龄 等 书籍,介绍这种新的术语与您充分解释差异可能只是在与其他程序员交谈时简单地引起混乱。避免在课外使用它。
模板允许您访问基类中的受保护成员。策略使您能够从使用它们的对象中开发算法更加轻松地耦合,并允许您将相同的算法注入许多不同类型的对象。
模板方法:
- 这是一种行为设计模式
- 它用于创建一种方法,并将实现的一些步骤推迟到子类。它由固定顺序的某些步骤组成。
- 它定义了执行算法的步骤,并且可以提供所有或某些子类可能常见的默认实现。
- 超类模板方法调用子类调用方法,
策略模式:
- 这是一种行为模式
- 它是基于委派的
- 它通过修改方法行为改变对象的胆量
- 它用于在算法家族之间切换
- 它在运行时改变对象的行为。将从算法家族中选择一种算法。
基本差异。
- 模板方法 使用继承和 战略 使用构图
- 这 模板方法 由基类实施不应被覆盖。 这样,算法的结构由超级类控制, ,和 详细信息在子类中实现
- 战略 封装接口背后的算法,这使我们能够在运行时更改算法。多种策略为接口提供了不同的实现。
不隶属于 StackOverflow