我的老师是一个非常好的老师,我倾向于理解他的观点,但这一点只是我的头脑。
他用两种变体解释了模板方法;
- 统一:标准变体,由抽象类组成,其中一些抽象方法定义了其他固定算法的变体部分。
- 分离:他自己的变体(我认为?),其中一个类包含templateMethod(),并使用委托给一个接口来改变算法的各个部分,这看起来就像策略模式一样。
任何人都可以看到他的观点,以及“分离”变体与战略模式的不同之处? 我附上了一张包含他书中两种图案的图像(尚未发表)。
答案 0 :(得分:1)
通常,Template方法使用子类来提供各种行为。使用策略,您注入算法对象。在您的示例中,模板(分离)和策略之间没有任何有用的区别。鉴于Gamma 等书的年龄,引入此在与其他程序员交谈时,充分解释差异的新术语很可能会引起混淆。避免在课外使用它。
模板允许您访问基类中的受保护成员。策略允许您从使用它们的对象中更加迷失地开发算法,并允许您将相同的算法注入到许多不同类型的对象中。
答案 1 :(得分:1)
我从未听说过模板方法模式的“分离变体”,我同意它看起来非常类似于策略。即使有一些关于界面所有权的理由或者从客户角度如何调用它们,我也很难发现将它们视为不同的模式会有任何好处。
答案 2 :(得分:0)
模板方法:
策略模式:
基本差异。
查看Journaldev Template method和Strategy文章,以便更好地理解sourcemaking文章。