单例
2019-07-04 本文已影响3人
谁家的猪
单例满足的条件
- 某个类只能有一个实例;
- 构造器私有化
- 它必须自行创建这个实例;
- 含有一个该类的静态变量来保存这个唯一的实例
- 它必须自行向整个系统提供这个实例;
- 对外提供获取该实例对象的方式:
- 直接暴露
- 用静态变量的get方法获取
- 对外提供获取该实例对象的方式:
单例的几种方式:
public class Single1 {
private Single1(){
}
public static final Single1 INSTANCE = new Single1();
}
public enum Single2 {
INSTANCE;
}
public class Single3 {
private Single3(){
}
public static final Single3 INSTANCE;
static {
INSTANCE = new Single3();
}
}
private Single4(){
}
private static volatile Single4 instance;
public Single4 getInstance(){
if(instance == null){
synchronized (this){
if (instance == null){
instance = new Single4();
}
}
}
return instance;
}
public class Single5 {
public Single5 getInstance(){
return Inner.INSTANCE;
}
private static class Inner{
private static final Single5 INSTANCE = new Single5();
}
}