Gank基友系列--简单的纯单例实现

Gank模式开启

今天很是无聊,又去逛了基友的博客。在里面读了两篇博客,一篇说的是单例设计模式,一篇说的是关于他这篇单例设计模式的反射侵犯

好奇心驱使

关于基友文章里的单例模式的确是有BUG的,那种方式是可以被轻松破坏掉的。在上面第二篇博客中也有详细的代码介绍。并且在第一篇博客末尾,他推荐使用枚举单例模式。枚举单例模式被称为实现单例模式成为最佳的方法。大家一定要学。但是那种方式非常的高大上,于是本着好奇心原则,我写了一个非常平民化的纯正单例模式。

代码

package com.blaze.study.designpattern;

import java.lang.reflect.Constructor;

/**
 * Created by sherlockblaze on 25/06/2017.
 */
class RealInstance{
    public static boolean flag = false;

    private RealInstance(){
        synchronized (RealInstance.class){
            if(flag == false) flag = !flag;
            else throw new RuntimeException("别太过分");
        }
    }

    private static class SingleHolder{
        private static final RealInstance REAL_INSTANCE = new RealInstance();
    }

    public static RealInstance getInstance(){
        return SingleHolder.REAL_INSTANCE;
    }

}

public class Demo_01 {
    public static void main(String[] args)throws Exception{
        Class classobj = Class.forName("com.blaze.study.designpattern.RealInstance");
        Constructor constructor = classobj.getDeclaredConstructor();
        constructor.setAccessible(true);
        Object obj1 = constructor.newInstance();
        System.out.println(obj1);
        Object obj2 = constructor.newInstance();
        System.out.println(obj2);
    }
}

结果

![Screen Shot 2017-06-25 at 15.51.29](http://os295mdc5.bkt.clouddn.com/Screen Shot 2017-06-25 at 15.51.29.png)

最后

欢迎大家访问我的博客

    原文作者:SherlockBlaze
    原文地址: https://www.jianshu.com/p/bf052e9232e9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞