Singleton可以被Factory取代吗?

los*_*and 5 singleton design-patterns factory

关于Singleton-Pattern已经有很多帖子了,但是我想在这个主题上再开一个,因为我想知道Factory-Pattern是否是删除这种"反模式"的正确方法.

在过去,我使用了单身人士,也是我的同事,因为它很容易使用.例如,Eclipse IDE或更好的工作台模型也会大量使用单例.这是由于一些关于E4(下一个大型Eclipse版本)的帖子让我开始重新思考单身人士.

最重要的是,由于这些单例,Eclipse 3.x中的依赖性是紧密耦合的.

让我们假设我想彻底摆脱所有单身人士,而不是使用工厂.
我的想法如下:

  • 隐藏复杂性
  • 耦合较少
  • 我可以控制创建了多少个实例(只需将引用存储为工厂的私有字段)
  • 当它在接口后面时,模拟工厂进行测试(使用依赖注入)
  • 在某些情况下,工厂可以使一个以上的单件过时(取决于业务逻辑/组件组成)

这有意义吗?如果没有,请说明您为什么这么认为的原因.还可以理解替代解决方案.

谢谢

Hen*_*nri 9

我同意它有时会产生感官.但是,这取决于你正在建设什么.

如果你用工厂取代每一个单身只是因为它"更好",那你就错了imho.它应该有用.如果你不打算嘲笑,如果你确定你只需要一个实例,那么替换只是"建筑mastrubation";)

不要误会我的意思,架构非常重要,但你不应该过分.


Eri*_*oom 5

在我看来,单身人士的主要缺点是紧耦合(其所有后果如糟糕的测试等)。

工厂模式允许更松散的耦合度,所以是的:用工厂替换单例听起来是个好主意。

正如Peter Kelly 所提到的,工厂有时也会成为单身人士。但是,工厂至少不会返回自己的实例,而是返回某个接口实现的实例,这是一个巨大的优势。