我有三个实现了iLog接口的日志类:
DatabaseLog
FileLog
ScreenLog
它们只能有一个实例。最初我想为每个类使用单例模式,但后来我想为何不使用工厂进行实例化呢?因为这样我就不必为所有未来的Log类创建单例模式。
也许将来有人希望将它们作为多个对象使用。
所以我的问题是:我应该在这里使用工厂模式还是单例模式?
我有三个实现了iLog接口的日志类:
DatabaseLog
FileLog
ScreenLog
它们只能有一个实例。最初我想为每个类使用单例模式,但后来我想为何不使用工厂进行实例化呢?因为这样我就不必为所有未来的Log类创建单例模式。
也许将来有人希望将它们作为多个对象使用。
所以我的问题是:我应该在这里使用工厂模式还是单例模式?
创建Logger实例的责任应该放在哪里?是每个想要记录日志的类中?还是某种了解整体上下文的监督组件中?
我认为更可能是后者,因此工厂会很有意义。工厂可以拥有所有决定所需记录哪种类型日志的逻辑。
如果有人想要创建多个这些类型的对象,那么单例显然不适用。
创建一个工厂,从配置文件中读取日志类型,并返回对具体类型的 ILog 引用。
像其他人所说的,我也建议使用工厂模式。不使用单例的一个优点是你没有全局状态,因此使你的代码更易于测试。