Language agnostic 工厂和模式如何关联?

Language agnostic 工厂和模式如何关联?,language-agnostic,design-patterns,oop,terminology,Language Agnostic,Design Patterns,Oop,Terminology,我刚刚读了一篇文章,讨论了单例类和静态类的优点 一些人提到模式X更像是一个“工厂”,而不是一个单一的“模式” “工厂”和“设计模式”之间有什么区别?工厂和单例是许多设计模式中的一部分 工厂模式可以实现为生成对象的单例模式。工厂也可以是实例类,因此不是单例。同样,单例可以是工厂,但也可以是其他东西,如全局设置管理器或事件注册表。工厂是一种特定的设计模式: 同样,“singleton”也是一种设计模式: 工厂是一个——而不是另一个方向。你的理解有点错误。“工厂”也是一种模式,在这里与“单件”形成对

我刚刚读了一篇文章,讨论了单例类和静态类的优点

一些人提到模式X更像是一个“工厂”,而不是一个单一的“模式”


“工厂”和“设计模式”之间有什么区别?

工厂和单例是许多设计模式中的一部分

工厂模式可以实现为生成对象的单例模式。工厂也可以是实例类,因此不是单例。同样,单例可以是工厂,但也可以是其他东西,如全局设置管理器或事件注册表。

工厂是一种特定的设计模式:

同样,“singleton”也是一种设计模式:

工厂是一个——而不是另一个方向。

你的理解有点错误。“工厂”也是一种模式,在这里与“单件”形成对比。

“工厂”是一种设计模式。您可以看到基于上下文的抽象工厂或工厂方法的几个示例。工厂是一种设计模式:-)就像Singleton一样。有人可能会说,单身是一种工厂。它在需要时创建一个对象,并使用一个设置更改策略(一旦创建了对象,它总是返回同一个对象),但这是一个抽象的过程,并且在大多数关于结构的争论中通常会混淆工厂是一种设计模式。基本上,工厂根据调用类的需要返回一个类。工厂返回的所有类都应该共享相同的接口,这样您就可以通过它们调用相同的公共方法(尽管每个类实现方法的方式可能不同)

这里有一个很好的链接

“工厂”而不是单身汉 “模式”

让我把它充实起来,并正确地用引号标出:

“工厂模式”而不是“单一模式”


两者都是。

答案很多,但似乎没有一个能很好地区分这两种模式。让我试试看,我是否能把这个问题弄糊涂

Singleton是一种模式,它限制您的系统只创建给定类的一个实例。该限制通常通过创建一个工厂来实现,该工厂将创建该类的实例(如果不存在),或者在后续调用中返回已创建的实例

工厂用于创建单例和其他情况。在许多情况下,它可以用来替换“新的”。一个优点是,您可以编写工厂以允许返回“设置”对象类型。通过这种方式,您的测试框架可以“设置”一个模拟对象,而不是真实的对象——然后系统的其余部分将使用该模拟对象

另一种情况可能是让工厂根据要返回的参数类型或数据(可能是XML)进行计算。它们还用于实现依赖项注入,其中工厂查看您需要什么,并构建对象链以满足这些需求