对于一些家庭作业,我们必须设计一个示例(使用类),其中策略和模板方法设计模式汇集在一起以相互补充,并使其更加可定制。或者“使用模板方法提供更多可自定义性来处理各种策略”,正如它所说的那样。
经过多次阅读和初步混淆,我想出了将两只动物作为类Dog
和Snake
的想法,并让它们都使用接口来实现特定的功能,移动(所以a狗可能会走路而蛇会滑行。我认为这是策略模式部分,因为它们各自分别实现自己的移动功能。
为了将模板方法模式合并到这里,我想我会这样做,所以它实现的类然后进一步子类化以进行自定义,这似乎与问题有关。所以我认为我已经将Mover
作为类,并将其子类化为Walk
和Slither
。但这让我很困惑,因为每只动物都会实现超类Mover
或其中一个子类?并且是超类Abstract,而子类是Interfaces?或者它们都是接口吗?
我的例子有意义吗?
答案 0 :(得分:2)
根据我的理解,您的示例不适合策略和模板,方案最适合抽象工厂,可能是原型(取决于完整要求)。 策略和模板之间的基本区别是继承v / s委托。
如果您正在搜索策略和模板示例我建议您使用一些游戏应用程序,其中完整游戏可以适合模板功能,如游戏结束,开始游戏,游戏的赢家更加宽松玩的规则可以适用于策略,比如什么时候移动,怎么做一些动作。
答案 1 :(得分:1)
没有。主要原因是因为策略适用于您需要采用不同的方法来做同样的事情,例如布局管理器。在你的例子中,Snakes有一种移动方式,同样也是Dog。
坦率地说,我没有看到这些模式如此完美地结合在一起,也不确定这些模式是什么。当事情以特定方式完成时,模板方法很棒,而变体只是以不同方式实现流程的步骤。
可能你应该想到一个过程,其中一个步骤可以插入一个策略。
答案 2 :(得分:0)
如果您想以某种方式设法在MoverStrategy中为BeginMove
和EndMove
方法获取适当的名称,那么您的示例就可以了。
下面:
FactoryMethod
负责声明创建适当策略的界面Strategy
Template method
,其中一个占位符DoMove
具体战略必须定义