2

我不是在寻找什么是单例。有数百个链接。我还没有找到好的例子client of singleton。示例考虑一个 Singleton 类(其内部根本不重要)

我想使用这个对象。客户将在哪里/如何使用它?它应该在构造函数中使用吗?静态初始化器?

Singleton tmp = Singleton.getInstance( );

我会很感激任何sample examples一个singleton clients??

4

1 回答 1

2

单例模式是当您创建一个对象时,该对象被设计为在程序中存在该对象的单个实例。作为客户端,您必须获得指向实例的指针。你只有四个选择:

  1. 在静态变量中保存引用并通过“惰性评估”进行初始化,即测试是否为空,然后在为空时初始化。之后设置值。
  2. 在静态变量中保存引用并在静态初始化时进行初始化。你确定那个时候单例它准备好了?这是一个问题。
  3. 将引用保存在局部变量中,并在每次调用 getInstance() 时进行初始化。
  4. 根本不要使用变量并在方法链中调用。如果一个呼叫只需要一个参考,这很好。

一般来说,getInstance 应该是相当有效的,并且应该没有理由在您自己的静态中保存引用的副本。从某种意义上说,你的静态是复制单例类的工作,单例类也必须有一个静态。一个单曲永远不应该改变,但如果它改变了,你就会留下一个陈旧的参考。如果您只需要一个呼叫,选项 4 是可以的,但是当需要多个呼叫时,这种模式会导致效率低下。因此,出于所有这些原因,我认为您应该使用选项 3 并每次都获取实例。

有时这种单例模式是合适的。也有不合适的时候,使用静态方法的类效率更高。你怎么知道什么时候什么时候不使用单例模式?这是我上周就这个主题发表的一篇博文:

http://agiletribe.purplehillsbooks.com/2013/10/08/dont-abuse-singleton-pattern/

于 2013-10-20T18:24:54.690 回答