0

刚总结了模板方法战略如下区别:使用模板方法与策略一起

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

什么在哪里结合两种设计的场景是合理和他们的关系会是什么样子?

简单的例子将涉及委托给模板方法的钩子方法内的战略,但是,我想不出一个很好的理由为这样的设计。此外,不是委托给子类,而是直接委托给策略。但是,如果没有继承,我们根本无法谈论模板方法。

+1

我觉得这个问题太宽泛了,无法得到任何正确或不正确的答案。 – jaco0646

+0

关于Stack的设计模式有很多问题。他们中的大多数都会询问有关不同模式之间必须作出选择的差异和情景。我要求一个可以将它们组合在一起的例子。我认为这是非常确切的要求。 – Siegmeyer

+0

你提到这将是一个微不足道的例子,将委托给模板方法的钩子方法内的战略和我的回应将是什么问题。至于证明组合的合理性,正确使用模式是由它或它们被使用的上下文驱动的。由于这个问题没有任何背景,所以任何答案都是假设的:假设我没有把两种模式结合在一起的错误 –

回答

2

我认为完全可以将两种模式结合起来。

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

enter image description here

即,可以通过指定“战略”,以不同的具体策略类变“语境”的实例的行为。它提供的功能与具有可以更改的字段以及根据此字段的内容执行if/elses链或交换机相同的功能。战略模式只是一种更复杂的方式来做条件。在硬编码条件下使用策略的优点是,您可以通过添加新类来添加更多条件,而无需修改已有的条件(“SOLID”原则中的“O”)。

另一方面,模板方法定义了一些算法,其中某些“钩子”保持打开状态,必须由具体类覆盖。

enter image description here

两种模式是关心的一个算法由两个不同的点的观点:战略有关在运行时交换的算法的约增韧的算法的结构的能力,和模板法。我不明白你为什么不能把两者结合起来。对我来说,完全有可能制定一个定义为模板方法的策略。

+0

我没有考虑使用策略,它是一种模板方法。这实际上是有道理的。我猜想,我想把它们机械地结合起来。 – Siegmeyer