有人能解释一下工厂模式和战略模式之间的区别吗?
对于我来说,两者看起来是一样的,除了一个额外的工厂类(在工厂模式中创建一个product对象)
有人能解释一下工厂模式和战略模式之间的区别吗?
对于我来说,两者看起来是一样的,除了一个额外的工厂类(在工厂模式中创建一个product对象)
当前回答
工厂模式是关于决定创建哪个对象,而策略模式是关于使用创建的对象。例如,使用哪种策略可以由工厂模式决定
其他回答
策略模式允许您多态地更改类的行为。
工厂模式允许封装对象创建。
加里说得很好。如果您使用的编码原则是抽象的,而不是“具体化”的,那么很多模式看起来就像是主题的变体。
简而言之:
工厂是用于创建具有相同行为的多个对象,而策略是用于具有不同工作方式的一个对象。
Factory(和Factory返回的FactoryMethod):
创建型模式 基于继承 工厂返回一个工厂方法(接口),该方法返回具体对象 你可以用新的具体对象代替接口,客户端(调用者)不应该知道所有的具体实现 客户端始终只访问接口,您可以在Factory方法中隐藏对象创建细节
看看这篇维基百科和javarevisited的文章
策略模式:
这是一种行为模式 它是基于委派的 它通过修改方法行为来改变对象的内容 它用来在一系列算法之间切换 它在运行时改变对象的行为
例子:
您可以为特定的项目(机票或购物车项目)配置折扣策略。在本例中,您将在7月至12月期间提供25%的折扣,而在1月至6月期间不提供折扣。
相关文章:
策略模式的真实例子
设计模式:工厂vs工厂方法vs抽象工厂
工厂模式和策略模式之间的关键区别是在哪里进行操作。工厂模式对创建的对象执行操作(工厂类在创建后完成工作),而策略模式对上下文类本身执行操作。
若要将工厂模式更改为策略模式,则不从工厂类返回创建的对象,将对象保存在上下文类中,并在上下文类中创建包装器方法来执行操作,而不是直接从创建的对象执行操作。
虽然有人可能会问我们是否可以对创建的对象进行操作,但为什么我们仍然需要在上下文类中创建包装器呢?好的,关键是操作。策略模式可以根据策略改变操作,而且不需要改变对象,可以依靠上下文对象来做不同的操作,而不需要改变对象本身。
您不能仅仅通过查看代码或分类来理解其中的区别。要正确掌握GoF模式,请寻找它们的意图:
策略:“定义一系列算法,封装每个算法,并使它们可互换。策略让算法独立于使用它的客户而变化。”
工厂方法:定义一个用于创建对象的接口,但是让子类来决定实例化哪个类。工厂方法允许类延迟实例化到子类。
下面是关于这两种模式的意图和区别的详细解释:工厂方法和策略设计模式的区别