0

对于一些作业,我们必须设计一个示例(带有类),其中策略和模板方法设计模式结合在一起,相互补充,从而使它们更加可定制。或者如它所说的“使用模板方法提供更多的可定制性来处理各种策略”。

经过大量阅读和最初的困惑,我想出了将两种动物作为类的想法,DogSnake让它们都使用接口来实现特定的功能,移动(所以狗可能会走路而蛇会滑行)。我认为这是策略模式部分,因为他们每个人都分别实现自己的移动功能。

为了将模板方法模式纳入其中,我想我会这样做,以便将它实现的类进一步子类化以实现可定制性,这似乎与问题相符。所以我想我会Mover作为班级并将其细分为Walkand Slither。但这让我感到困惑,因为每只动物都会实现超类Mover还是子类之一?超类是抽象的,而子类是接口吗?还是它们都是接口?

我的例子有意义吗?

4

3 回答 3

2

根据我的理解,您的示例不适合策略和模板,场景最适合抽象工厂并且可能是原型(取决于全部要求)。策略和模板之间的基本区别是继承与委托。

如果您正在搜索策略和模板示例,我建议您使用一些游戏应用程序,其中完整游戏可以适合模板功能,例如游戏结束、开始游戏、游戏的获胜者较松的游戏和游戏规则可以适合策略,例如何时移动,如何处理一些动作。

于 2013-12-06T04:27:01.923 回答
1

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

坦率地说,我不认为这些模式可以很好地结合在一起,不确定任务是什么。当事情以特定的方式完成时,模板方法很棒,而变体只是以不同的方式实现流程的步骤。

可能您应该考虑一个过程,其中一个步骤可以插入一个策略。

于 2013-12-06T03:59:18.377 回答
0

Your example is OK if you would somehow manage to get appropriate names to BeginMove and EndMove methods in MoverStrategy.

Here:

  • GetMoveStrategy - FactoryMethod responsible for declaring interface for creation appropriate strategy
  • MoverStrategy - Strategy
  • Move - Template method with one placeholder DoMove which Concrete Strategy must define

enter image description here

于 2013-12-06T07:06:31.540 回答