singleton 一般是我们学习设计模式时接触的第一种模式,也是比较常用的一种模式
目前为止,有如下三种正确的写法
今天回过头来看了一下,发现1和3少了私有构造器,现在修改了一下加上了
第一种
public class Singleton {
static Singleton instance;
private Singleton()
{
}
public static synchronized Singleton getInstance() {
if (instance == null)
instance = new Singleton();
return instance;
}
}
这种写发的问题是并发引起的效率问题,因为实际上只有在第一次初始化的时候在真正需要锁
第二种,也是比较常见的方法
public class Singleton
{
private static Singleton instance = new Singleton();
private Singleton()
{
}
public static Singleton getInstance()
{
return instance;
}
}
但这种方法不是 lazy loading的
第三种,一种创新性的写法,并解决了 lazy loading的问题
public class Singleton {
private Singleton()
{
}
static class SingletonHolder {
static Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}