首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单例vs工厂?

单例vs工厂?
EN

Stack Overflow用户
提问于 2010-05-03 17:37:46
回答 5查看 2.6K关注 0票数 3

我有3个日志类,它们都实现了iLog接口:

代码语言:javascript
复制
DatabaseLog
FileLog
ScreenLog

它们只能有一个实例。最初我想为每个类使用单一模式,但后来我想为什么不使用工厂来实例化,因为这样我就不必为每个类和所有未来的Log类创建单一模式。

也许将来会有人想要它们成为多个对象。

所以我的问题是:我应该在这里使用工厂模式还是单例模式?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-05-03 17:42:42

创建Logger实例的责任应该放在哪里?对于每个想要记录的类?使用某种能够理解整体背景的监督组件?

我认为更有可能是后者,因此一个工厂将是有意义的。faactory可以拥有决定需要哪种类型的日志记录的所有逻辑。

票数 6
EN

Stack Overflow用户

发布于 2010-05-03 18:06:20

单例模式和工厂模式服务完全不同的目的。这种单例模式用于确保一个类只有一个实例。工厂模式用于抽象对象实例化。您可以使用工厂来创建单例,并且工厂本身通常是单例,但不存在一个对另一个。它们是互补的,而不是对立的模式。

在您的例子中,实现单例模式可以确保每个类只能有一个实例。如果已经存在不创建新实例的工厂,则可以使用该工厂。

如果您有一个用于日志记录的接口和几个实现(例如,日志记录到文件或日志到网络),您可以使用工厂来动态实例化这些实现,并隐藏实例化过程,每个实现可能会有所不同(例如,打开一个文件或打开一个套接字)。如果这是你想要的,你仍然可以让你的对象成为单例。

票数 4
EN

Stack Overflow用户

发布于 2010-05-03 17:45:40

如果有人想要创建这些类型的多个对象,那么singleton显然是不可能的。

创建一个工厂,该工厂从配置文件(可能)读取日志的类型,并返回对具体类型的ILog引用

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2757176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档