我的老师是一位非常好的老师,我倾向于理解他的观点,但这一点让我无法理解。他用两种变体解释了模板方法;
- 统一:标准变体,由一个抽象类和一些抽象方法组成,这些抽象方法定义了其他固定算法的变体部分。
- 分离:他自己的变体(我认为?),其中一个类包含 templateMethod() 并使用对接口的委托来改变算法的各个部分,这在我看来与策略模式完全一样。
谁能明白他的观点是什么,以及“分离”变体与策略模式有何不同?
我附上了一张图片,其中包含他书中的两种模式(尚未出版)。
我的老师是一位非常好的老师,我倾向于理解他的观点,但这一点让我无法理解。他用两种变体解释了模板方法;
- 统一:标准变体,由一个抽象类和一些抽象方法组成,这些抽象方法定义了其他固定算法的变体部分。
- 分离:他自己的变体(我认为?),其中一个类包含 templateMethod() 并使用对接口的委托来改变算法的各个部分,这在我看来与策略模式完全一样。
谁能明白他的观点是什么,以及“分离”变体与策略模式有何不同?
我附上了一张图片,其中包含他书中的两种模式(尚未出版)。
在常见的用法中,模板方法使用子类来提供不同的行为。使用 Strategy,您可以注入一个算法对象。在您的示例中,模板(分离)和策略之间没有有用的区别。鉴于 Gamma等人的书的年代久远,在没有充分解释差异的情况下引入这个新术语很可能会在您与其他程序员交谈时引起混淆。避免在课程之外使用它。
模板允许您访问基类中的受保护成员。策略允许您开发与使用它们的对象更松散耦合的算法,并允许您将相同的算法注入到许多不同类型的对象中。
我从未听说过模板方法模式的“分离变体”,我同意它看起来与策略极其相似。即使有一些关于接口所有权的推理或者你如何从客户端的角度调用它们,我也几乎没有发现考虑它们不同的模式有什么好处。
模板方法:
策略模式:
基本区别。