介绍
单例模式可以确保在程序运行期间,只有一个对象实例
立即加载/饿汉模式
使用类的时候已经将对象创建完毕,常见的实现办法就是new实例化。从中文语境来说,有着急、急迫的意思,所以也称为饿汉模式
定义方式一:
public class Singleton {
private final static Singleton INSTANCE = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return INSTANCE;
}
}
定义方式二:
public class Singleton {
private static Singleton instance;
static {
instance = new Singleton();
}
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
延迟加载/懒汉模式
在调用get()方法时实例才被创建,常见的实现办法是在get()方法中进行new实例化。从中文语境来说,是缓慢、不急迫的意思,所以也称为懒汉模式
定义方式一(双重检查):
public class Singleton {
//保证线程可见性
private static volatile Singleton singleton;
private Singleton() {}
//双重检查
public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
定义方式二(静态内部类):
public class Singleton {
private Singleton() {}
private static class SingletonInstance {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonInstance.INSTANCE;
}
}