美文网首页程序员架构算法设计模式和编程理论
Gank基友系列--简单的纯单例实现

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

作者: SherlockBlaze | 来源:发表于2017-06-25 16:01 被阅读0次

    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)

    最后

    欢迎大家访问我的博客

    相关文章

      网友评论

        本文标题:Gank基友系列--简单的纯单例实现

        本文链接:https://www.haomeiwen.com/subject/tckrcxtx.html