我有3个日志类,它们都实现了iLog接口:
DatabaseLog
FileLog
ScreenLog它们只能有一个实例。最初我想为每个类使用单一模式,但后来我想为什么不使用工厂来实例化,因为这样我就不必为每个类和所有未来的Log类创建单一模式。
也许将来会有人想要它们成为多个对象。
所以我的问题是:我应该在这里使用工厂模式还是单例模式?
发布于 2010-05-03 17:42:42
创建Logger实例的责任应该放在哪里?对于每个想要记录的类?使用某种能够理解整体背景的监督组件?
我认为更有可能是后者,因此一个工厂将是有意义的。faactory可以拥有决定需要哪种类型的日志记录的所有逻辑。
发布于 2010-05-03 18:06:20
单例模式和工厂模式服务完全不同的目的。这种单例模式用于确保一个类只有一个实例。工厂模式用于抽象对象实例化。您可以使用工厂来创建单例,并且工厂本身通常是单例,但不存在一个对另一个。它们是互补的,而不是对立的模式。
在您的例子中,实现单例模式可以确保每个类只能有一个实例。如果已经存在不创建新实例的工厂,则可以使用该工厂。
如果您有一个用于日志记录的接口和几个实现(例如,日志记录到文件或日志到网络),您可以使用工厂来动态实例化这些实现,并隐藏实例化过程,每个实现可能会有所不同(例如,打开一个文件或打开一个套接字)。如果这是你想要的,你仍然可以让你的对象成为单例。
发布于 2010-05-03 17:45:40
如果有人想要创建这些类型的多个对象,那么singleton显然是不可能的。
创建一个工厂,该工厂从配置文件(可能)读取日志的类型,并返回对具体类型的ILog引用
https://stackoverflow.com/questions/2757176
复制相似问题