有人能解释一下工厂模式和战略模式之间的区别吗?

对于我来说,两者看起来是一样的,除了一个额外的工厂类(在工厂模式中创建一个product对象)


当前回答

战略和工厂是不同的目的。在策略中,您已经定义了方法,使用此模式可以交换行为(算法)。来到工厂有很多变化。但是GO4状态工厂的原始模式将对象的创建留给了子类。这里用工厂替换的是完整的实例,而不是你感兴趣的行为。这样你将取代整个系统,而不是算法。

其他回答

工厂模式是一种创建模式。战略模式是一种操作模式。换句话说,工厂模式用于创建特定类型的对象。策略模式用于以特定方式执行一个操作(或一组操作)。在经典的例子中,工厂可能会创建不同类型的动物:狗、猫、虎,而策略模式将执行特定的动作,例如,移动;使用跑,走或Lope策略。

事实上,这两者可以一起使用。例如,您可能有一个创建业务对象的工厂。它可以根据持久性介质使用不同的策略。如果数据以XML形式存储在本地,则使用一种策略。如果数据位于不同的远程数据库中,则它将使用另一个数据库。

工厂模式是一种创建模式,使用指定的属性(行为)创建。而在创建后的运行时,你不能改变它的属性(行为)。因此,如果你需要不同的属性(行为),你必须删除对象,并创建具有所需属性(行为)的新对象。这可不是什么好事。 而在策略模式的情况下,你可以在运行时改变属性(行为)。

只是补充一下tvanfosson所说的,就实现而言,很多模式看起来都是一样的。也就是说,很多时候你创建了一个接口,而在你的代码中可能没有,然后创建了该接口的一堆实现。区别在于它们的目的和使用方式。

战略和工厂是不同的目的。在策略中,您已经定义了方法,使用此模式可以交换行为(算法)。来到工厂有很多变化。但是GO4状态工厂的原始模式将对象的创建留给了子类。这里用工厂替换的是完整的实例,而不是你感兴趣的行为。这样你将取代整个系统,而不是算法。

Factory(和Factory返回的FactoryMethod):

创建型模式 基于继承 工厂返回一个工厂方法(接口),该方法返回具体对象 你可以用新的具体对象代替接口,客户端(调用者)不应该知道所有的具体实现 客户端始终只访问接口,您可以在Factory方法中隐藏对象创建细节

看看这篇维基百科和javarevisited的文章

策略模式:

这是一种行为模式 它是基于委派的 它通过修改方法行为来改变对象的内容 它用来在一系列算法之间切换 它在运行时改变对象的行为

例子:

您可以为特定的项目(机票或购物车项目)配置折扣策略。在本例中,您将在7月至12月期间提供25%的折扣,而在1月至6月期间不提供折扣。

相关文章:

策略模式的真实例子

设计模式:工厂vs工厂方法vs抽象工厂