java什么是正确的Singleton实现,为什么
两种java实现之间的区别是什么,哪一种是正确的,为什么
class Singleton
{
private static Singleton instance = new Singleton();
private Singleton()
{
System.out.println("Singleton(): Initializing Instance");
}
public static Singleton getInstance()
{
return instance;
}
}
或
class Singleton
{
private static Singleton instance;
static
{
instance = new Singleton();
}
private Singleton()
{
System.out.println("Singleton(): Initializing Instance");
}
public static Singleton getInstance()
{
return instance;
}
}
# 1 楼答案
首先来问你的问题
好吧,两段代码都是一样的。我看不出有什么不同
然而,正如其他答案所暗示的,有更好的方法来创建单例实现。但这与你的问题有点离题,互联网(google)是你最好的朋友
# 2 楼答案
这两种实现都不正确,而且静态限定符根本不是很好的实践:) 以下是我对单身人士的建议:
# 3 楼答案
没什么区别。在这两种情况下,您都在急切地创建一个实例,在调用getInstance()时,该实例已经准备就绪
但是如果你想要一个简单而好的单例实现
最好使用枚举来实现单例
# 4 楼答案
一般来说,
Singleton
设计模式的概念是基于只有一个instance
的class
。这可以通过两个主要方面来实现:1)为类提供私有构造函数,以防止任何外部类调用它并重新创建实例。这可以通过以下方式实现:
2)有一个
static
方法,允许您检索初始化的instance
,或者在尚未初始化时初始化它,正如@awvery Awesome在他的回答中提到的:# 5 楼答案
我的答案基于这篇关于单身的文章:http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
例1:
例2:
我希望这有帮助。如果没有,请提供一些细节或更多背景信息
# 6 楼答案
上述两种方法都不是应用单例模式的正确方法
这是正确的方法。惰性实例化方式:
当第一次调用
getInstance()
对象时,Singleton
方法会惰性地实例化它。因此Singleton
对象在需要时才出现在内存中