一起使用模板方法和策略

时间:2017-05-19 13:28:18

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

Gang of Four总结了模板方法策略之间的区别,如下所示:

  

模板方法使用继承来改变算法的一部分。   策略使用委托来改变整个算法。

合并两种设计的合理性以及它们之间的关系如何?

琐碎的例子将涉及委托模板方法的钩子方法内的策略,但是,我不能想到这种设计的良好理由。另外,不是委托给子类,而是可以直接委托给Strategy。但是,如果没有继承,我们根本不能谈论模板方法。

1 个答案:

答案 0 :(得分:2)

我认为将这两种模式结合起来是完全可能的。

如果要在运行时更改某个行为,只需更改策略实例,就可以使用策略模式。

enter image description here

即,您可以更改" Context"的实例的行为。通过分配"策略"到一个不同的具体战略课。它提供的功能与您可以更改的字段相同,并根据此字段的内容执行if / elses或switch的链。策略模式只是一种更复杂的有条件的方式。在硬编码条件下使用策略的优点是,您可以通过添加新类来添加更多条件,而无需修改现有类(" O"" SOLID"原则)。

另一方面,模板方法定义了一种具有一些"钩子的算法。保持开放状态,必须由具体类别覆盖。

enter image description here

两种模式都关注两种不同观点的算法:关于在运行时交换算法的能力的策略,以及关于灵活化算法结构的模板方法。我不明白为什么你们不能将两者结合起来。对我来说,完全有可能将策略定义为模板方法。