Design patterns 在哪种情况下我们使用工厂模式,在哪种情况下使用单例模式?

Design patterns 在哪种情况下我们使用工厂模式,在哪种情况下使用单例模式?,design-patterns,Design Patterns,请帮助我理解工厂模式和单例模式,我们何时需要使用工厂模式以及何时使用单例模式 其中一个的主要优点/缺点是什么 任何建议(解释)都会对我有很大帮助。它们不是很相似,因此它们之间没有优势。如果您感到困惑,请先阅读: 如果希望只允许实例化对象类的一个实例,请使用单例模式 当您需要抽象出对象类的实例化细节时,请使用工厂模式。它们做两件截然不同的事情 工厂的存在是为了创建类的一个或多个副本。它或它公开的方法可以提供给需要依赖关系的另一个类,依赖类可以调用工厂方法来获取实例 存在一个单例来创建类的一

请帮助我理解工厂模式和单例模式,我们何时需要使用工厂模式以及何时使用单例模式

其中一个的主要优点/缺点是什么


任何建议(解释)都会对我有很大帮助。

它们不是很相似,因此它们之间没有优势。如果您感到困惑,请先阅读:

如果希望只允许实例化对象类的一个实例,请使用单例模式


当您需要抽象出对象类的实例化细节时,请使用工厂模式。

它们做两件截然不同的事情

工厂的存在是为了创建类的一个或多个副本。它或它公开的方法可以提供给需要依赖关系的另一个类,依赖类可以调用工厂方法来获取实例


存在一个单例来创建类的一个且仅一个副本。对该类的引用是静态获取的,但该引用可以作为实例传递,这与纯静态类不同。

@Close Supported Person:为什么这个问题不真实?虽然它可能有点超出范围,有点复杂和神秘,仍然值得一提的是,使用DI/IoC框架可以模拟这两种行为,创建对象的单例模式实例,或者像工厂一样将它们吐出。通过这种方式,您可以保持较高的可测试性,因为您可以从静态单例调用中分离耦合。只是我的2c@Aren,不幸的是,我不认为你的评论会像你预测的那样对OP有多大帮助。@Mike:这可能对OP没有帮助,但它可能会帮助发现这个问题的其他人寻找其他东西。这就是为什么我在评论前面加了一条免责声明。当我们使用Singleton模式时,只创建了类的一个实例,该实例对所有用户都是通用的,或者每个用户都有自己的实例?@Vijjendra-“对所有用户都是通用的”或“每个用户都有自己的实例”取决于执行代码是否在同一进程中。它与“用户”无关。如果您的进程是web应用程序,则一个单一实例可能是所有请求的唯一实例,但如果您的web服务器启动另一个辅助进程/任务进程,则该进程的内存空间中也可能有另一个单一实例。@Mike:谢谢,Mike请解释第二部分(web服务器)场景。@Vijjendra-这取决于您的web服务器。最初,您的问题是用ASP.NET标记的,请阅读