几种单例的写法

早上随便翻到单例的写法,那我也随手写几个吧

public class SingleClassTest {
    //定义一个private的构造方法,就是防止外部通过new SingleClassTest去实例化
    private SingleClassTest(){}

    //普通饿汉写法
    private static final SingleClassTest INSTANCE = new SingleClassTest();

    private static SingleClassTest getInstance(){
        return INSTANCE;
    }

    //普通懒汉写法
    private static SingleClassTest INSTANCE = null;

    private static SingleClassTest getInstance(){
        if (INSTANCE == null){
            INSTANCE = new SingleClassTest();
        }
        return INSTANCE;
    }

    //禁止重排序,double-check写法
    private static volatile SingleClassTest INSTANCE = null;

    private static SingleClassTest getInstance(){
        if (INSTANCE == null){
            synchronized (SingleClassTest.class){
                if (INSTANCE == null){
                    INSTANCE = new SingleClassTest();
                }
            }
        }
        return INSTANCE;
    }

    //静态内部类写法
    private static SingleClassTest getInstance(){
       return InnerSingleClass.INSTANCE;
    }

    private static class InnerSingleClass{
        private static final SingleClassTest INSTANCE = new SingleClassTest();
    }

}

除了以下几种,需要知道枚举也是属于一种实现方式,并且它可以防止序列化/反序列化、反射

public enum SingleClassTest {
    INSTANCE;
    public static SingleClassTest getInstance(){
        return INSTANCE;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容