对于一些家庭作业,我们必须设计一个示例(带有类),其中策略和模板方法设计模式结合在一起,相互补充,从而使它们更具可定制性。或者“使用模板方法提供更多的可定制性来处理各种策略”。
经过大量阅读和最初的困惑,我想到了将两种动物作为类,Dog
和Snake
,并让它们都使用接口来实现特定的功能,移动(这样狗可以行走,蛇可以滑行)。我认为这是策略模式的一部分,因为它们各自单独实现自己的移动功能。
为了将模板方法模式融入其中,我想我应该这样做,这样它实现的类就可以进一步子类化,以实现可定制性,这似乎与问题相符。所以我想我应该把Mover
作为类,并把它分为Walk
和Slither
。但这让我很困惑,每个动物会实现超类Mover
,还是其中一个子类?超类是抽象的,而子类是接口吗?或者它们都是接口?
我的例子有意义吗?
如果您设法为MoverStrategy中的BeginMobile
和EndMobile
方法获取适当的名称,则您的示例是可以的。
在这里:
FactoryMethod
负责声明创建适当策略的接口策略
模板方法
带有一个占位符DoMobile
,具体策略必须定义不。主要原因是,当你需要用不同的方法来做同一件事时,策略是适用的,例如布局管理器。在你的例子中,蛇有一种移动方式,狗也是。
坦率地说,我不认为这些模式能很好地结合在一起,不确定任务是什么。当事情以特定的方式完成时,模板方法很棒,而变体只是以不同的方式实现过程的步骤。
也许你应该考虑一个过程,其中一个步骤可以插入一个策略。
根据我的理解,您的示例不适合策略和模板,场景最适合抽象工厂,可能是原型(取决于完整需求)。策略和模板之间的基本区别是继承v/s委托。
如果你正在搜索策略和模板示例,我建议你使用一些游戏应用程序,其中完整的游戏可以放入模板功能中,如游戏结束、游戏开始、游戏赢家、游戏中的失败者,以及游戏规则,可以放入策略中,如何时移动、如何使用某些移动。
9. 策略(Strategy) Intent 定义一系列算法,封装每个算法,并使它们可以互换。 策略模式可以让算法独立于使用它的客户端。 Class Diagram Strategy 接口定义了一个算法族,它们都实现了 behavior() 方法。 Context 是使用到该算法族的类,其中的 doSomething() 方法会调用 behavior(),setStrategy(Strategy)
介绍 策略模式定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户。 正文 在理解策略模式之前,我们先来一个例子,一般情况下,如果我们要做数据合法性验证,很多时候都是按照swith语句来判断,但是这就带来几个问题,首先如果增加需求的话,我们还要再次修改这段代码以增加逻辑,而且在进行单元测试的时候也会越来越复杂,代码如下: validato
模板方法(Template Method) Intent 定义算法框架,并将一些步骤的实现延迟到子类。 通过模板方法,子类可以重新定义算法的某些步骤,而不用改变算法的结构。 Class Diagram Implementation 冲咖啡和冲茶都有类似的流程,但是某些步骤会有点不一样,要求复用那些相同步骤的代码。 // java public abstract class CaffeineBeve
介绍 模板方法(TemplateMethod)定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 模板方法是一种代码复用的基本技术,在类库中尤为重要,因为他们提取了类库中的公共行为。模板方法导致一种反向的控制结构,这种结构就是传说中的“好莱坞法则”,即“别找找我们,我们找你”,这指的是父类调用一个类的操作,而不是相反。具
本文向大家介绍Python设计模式之策略模式实例详解,包括了Python设计模式之策略模式实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python设计模式之策略模式。分享给大家供大家参考,具体如下: 策略模式(Strategy Pattern):它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户. 下面是一个商场活动的实现 运行
本文向大家介绍Java设计模式之策略模式详解,包括了Java设计模式之策略模式详解的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Java策略模式,供大家参考,具体内容如下 1、策略模式(Strategy Pattern)是一种比较简单的模式,也叫做政策模式(PolicyPattern)。 定义如下: Define a family of algorithms,encapsulate