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)
最后
欢迎大家访问我的博客