单例模式

一、单例模式注意的点
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
}
原文地址:https://www.cnblogs.com/dujiudizhimo/p/12961529.html