1 简介
保证一个类中,仅有一个实例,并提供一个访问它的全局访问点。要点如下:
- 该类只有一个实例
- 它必须自行创建这个实例
- 它必须自行向整个系统提供这个实例
2 代码
2.1 饿汉模式
类加载时就生成了一个对象。
public class Singleton {
private static final Singleton singleton=new Singleton();
private Singleton() {}
public static Singleton getSingleton() {
return singleton;
}
}
2.2 懒汉模式
类加载时没有生成对象,在第一次调用 getInstance() 方法时才生成对象。
public class Singleton {
private static Singleton singleton=null;
private Singleton() {}
public synchronized static Singleton getSingleton() {
if(singleton==null) {
singleton=new Singleton();
}
return singleton;
}
}
2.3 双重检验模式
public class Singleton {
private volatile static Singleton singleton=null;
private Singleton() {}
public static Singleton getSingleton() {
if(singleton==null) {
synchronized(Singleton.class) {
if(singleton==null) {
singleton=new Singleton();
}
}
}
return singleton;
}
}
2.4 静态内部类模式
静态内部类实现的单例是懒加载且安全的。静态内部类在被调用时才被加载。
public class Singleton {
private static class SingletonHolder{ //静态内部类
private static final Singleton singleton=new Singleton();
}
private Singleton() {}
public static Singleton getSingleton() {
return SingletonHolder.singleton;
}
}