【问题标题】:Does my example for using the Strategy design pattern with the Template Method design pattern make sense?我将策略设计模式与模板方法设计模式结合使用的示例是否有意义?
【发布时间】:2023-03-17 13:14:01
【问题描述】:

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

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

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

我的例子有意义吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        如果您设法为 MoverStrategy 中的 BeginMoveEndMove 方法获取适当的名称,您的示例就可以了。

        这里:

        • GetMoveStrategy - FactoryMethod 负责声明接口以创建适当的策略
        • MoverStrategy - Strategy
        • 移动 - Template method 和一个占位符 DoMove,具体策略必须定义

        【讨论】:

          猜你喜欢
          • 2010-11-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多