使用策略设计模式和模板方法设计模式的示例是否有意义?

时间:2013-12-06 01:27:42

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

对于一些家庭作业,我们必须设计一个示例(使用类),其中策略和模板方法设计模式汇集在一起​​以相互补充,并使其更加可定制。或者“使用模板方法提供更多可自定义性来处理各种策略”,正如它所说的那样。

经过多次阅读和初步混淆,我想出了将两只动物作为类DogSnake的想法,并让它们都使用接口来实现特定的功能,移动(所以a狗可能会走路而蛇会滑行。我认为这是策略模式部分,因为它们各自分别实现自己的移动功能。

为了将模板方法模式合并到这里,我想我会这样做,所以它实现的类然后进一步子类化以进行自定义,这似乎与问题有关。所以我认为我已经将Mover作为类,并将其子类化为WalkSlither。但这让我很困惑,因为每只动物都会实现超类Mover或其中一个子类?并且是超类Abstract,而子类是Interfaces?或者它们都是接口吗?

我的例子有意义吗?

3 个答案:

答案 0 :(得分:2)

根据我的理解,您的示例不适合策略和模板,方案最适合抽象工厂,可能是原型(取决于完整要求)。 策略和模板之间的基本区别是继承v / s委托。

如果您正在搜索策略和模板示例我建议您使用一些游戏应用程序,其中完整游戏可以适合模板功能,如游戏结束,开始游戏,游戏的赢家更加宽松玩的规则可以适用于策略,比如什么时候移动,怎么做一些动作。

答案 1 :(得分:1)

没有。主要原因是因为策略适用于您需要采用不同的方法来做同样的事情,例如布局管理器。在你的例子中,Snakes有一种移动方式,同样也是Dog。

坦率地说,我没有看到这些模式如此完美地结合在一起,也不确定这些模式是什么。当事情以特定方式完成时,模板方法很棒,而变体只是以不同方式实现流程的步骤。

可能你应该想到一个过程,其中一个步骤可以插入一个策略。

答案 2 :(得分:0)

如果您想以某种方式设法在MoverStrategy中为BeginMoveEndMove方法获取适当的名称,那么您的示例就可以了。

下面:

  • GetMoveStrategy - FactoryMethod负责声明创建适当策略的界面
  • MoverStrategy - Strategy
  • 移动 - Template method,其中一个占位符DoMove具体战略必须定义

enter image description here