一、单例模式注意的点
1、构造方法必须私有,别人不能随意使用,则无法随意创建对象;
2、必须创建出唯一一个对象供他人使用;
3、必须提供一个方法获得这唯一的对象;
二、单例模式写法:
1、饿汉式
public class Singleton{
private static final Singleton SINGLETON = new Singleton();//static 静态属性,final常量 一定不会改变,类初始化的时候加载,类只加载一起,只有一个实例。
private Singleton(){} //构造方法私有化,他人无法随意new 对象
private Singleton getInstance(){ //给出他人使用唯一对象的方式
return SINGLETON;
}
}
2、DCL(double checked locking)双重锁检查
public class Singleton{
private static volatile Singleton SINGLETON = null;//volatile禁止指令重排序,防止使用未初始化的引用
private Singleton(){}
private Singleton getInstance(){
if(SINGLETON == null){
synchronized(Singleton.class){
If( SINGLETON == null ){
SINGLETON = new Singleton()
}
}
}
}
}
3、静态内部类方式
public class Singleton{//类加载只加载一次,外部类加载的时候内部类不加载,显式的调用getInstance的时候内部类才加载
private Singleton(){}
Private class static SingletonHold{
private static Singleton SINGLETON = new Singleton();
}
public Singleton getInstance(){
return SingletonHold.SINGLETON;
}
}
4、枚举类型
public enum Singleton{//枚举类型没有构造函数,所以可以防止反序列法
INSTANCE
}