核心思想:构造器私有化。
饿汉式:
//饿汉式单例模式
public class Hungry {
    private Hungry(){}
    private final static Hungry hungry=new Hungry();
    public static Hungry getHungry(){
        return hungry;
    }
}
缺点:
消耗内存过高
在反射下是不安全
懒汉式(线程不安全)
public class LazMan {
    private LazMan(){}
    
    public static LazMan lazman;
    
    public static LazMan lazMan(){
        if (lazman==null){
            lazman=new LazMan();
        }
        return lazman;
    }
}
缺点:
在多线程下不安全
在反射下不安全
懒汉式(线程安全)
//懒汉式单例
public class LazMan {
    private LazMan(){}
    public volatile static LazMan lazman;
    public static LazMan lazMan(){
        if (lazman==null){
            synchronized (LazMan.class){
                if (lazman==null){
                    lazman=new LazMan();
                }
            }
        }
        return lazman;
    }
}
缺点:
在反射下不安全
内部类单例
//静态内部类单例
public class Holder {
    
    private Holder(){}
    
    public static Holder getHolder(){
        return InnerClass.holder;
    }
    
    private static class InnerClass{
        private final static Holder holder=new Holder();
    }
}
缺点:
在反射下不安全
为什么反射可以破解:
使用反射可以直接修改内部的权限
直接可以把构造器公开
解决:
使用枚举,因为反射不能破坏枚举
public enum EnumSingle {
    INSTANCE;
    public EnumSingle getInstance(){
        return INSTANCE;
    }
}