我不是在寻找什么是单例。有数百个链接。我还没有找到单例客户端
的好例子。示例考虑一个 Singleton 类(其内部结构根本不重要)
我想使用这个对象。客户将在哪里/如何使用它?它应该在构造函数中使用吗?静态初始化器 ?
Singleton tmp = Singleton.getInstance( );
我希望有任何单例客户端
的示例
??
最佳答案
单例模式是指当您创建一个对象时,该对象被设计为在程序中存在该对象的单个实例。作为客户端,您必须获取指向实例的指针。您只有四个选择:
- 在静态变量中保存引用并通过“惰性求值”进行初始化,即测试是否为 null,然后在为 null 时进行初始化。之后该值就被设置了。
- 在静态变量中保存引用并在静态初始化时进行初始化。你确定当时单例已经准备好了吗?这是一个令人担忧的问题。
- 在局部变量中保存引用,并在每次调用 getInstance() 时进行初始化。
- 根本不使用变量并在方法链中调用。如果一次通话只需要一份引用资料,这样就可以了。
一般来说,getInstance 应该非常高效,并且没有什么理由在您自己的静态中保存引用的副本。从某种意义上说,你的静态是重复单例类的工作,单例类也必须有一个静态。单曲不应该改变,但如果改变了,你将保留一个陈旧的引用。如果您只需要一次调用,则选项 4 是可以的,但当需要多次调用时,此模式会导致效率低下。因此,出于所有这些原因,我相信您应该使用选项 3 并每次都获取实例。
有时这种单例模式是合适的。也有一些时候是不合适的,具有静态方法的类更有效。如何判断何时使用单例模式以及何时不使用单例模式?这是我上周就该主题发表的一篇博客文章:
http://agiletribe.purplehillsbooks.com/2013/10/08/dont-abuse-singleton-pattern/
关于java - 单例客户端应该如何使用单例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19481031/