使用java Reflection机制使单例模式不再只有一个对象的实例
来源:互联网 发布:vray for c4d mac 编辑:程序博客网 时间:2024/05/22 15:08
在java的单例模式中,有几个要点。第一,构造方法私有,防止其它应用程序调用构造方法来创建对象;第二,有一个static的对象存放全局性变量,有一个getInstance方法来返回全局性变量,常见代码如下:
public class FactoryImpl { private final static AtomicInteger count = new AtomicInteger(0); private final static FactoryImpl INSTANCE = new FactoryImpl(); private int id; private FactoryImpl() { id = count.incrementAndGet(); } public int getId() { return id; } public static FactoryImpl getInstance() { return INSTANCE; }}但是我们还可以通用java Reflection机制调用类的构造方法,来创建多个对象,测试代码如下:
import java.lang.reflect.Constructor;public class FactoryImplTest { private static final Class<?>[] EMPTY_ARRAY = new Class[] {}; public static <T> T newInstance(Class<T> theClass) { T result; try { Constructor<T> meth = theClass.getDeclaredConstructor(EMPTY_ARRAY); meth.setAccessible(true); result = meth.newInstance(); } catch (Exception e) { throw new RuntimeException(e); } return result; } public static void main(String[] args) { FactoryImpl impl1 = FactoryImpl.getInstance(); System.out.println("impl1.getId: " + impl1.getId()); FactoryImpl impl2 = FactoryImpl.getInstance(); System.out.println("impl2.getId: " + impl2.getId()); FactoryImpl impl3 = newInstance(FactoryImpl.class); System.out.println("impl3.getId: " + impl3.getId()); FactoryImpl impl4 = newInstance(FactoryImpl.class); System.out.println("impl4.getId: " + impl4.getId()); }}
输出结果:
impl1.getId: 1impl2.getId: 1impl3.getId: 2impl4.getId: 3
这说明impl1和impl2对象是一个,但impl3和impl4是用java Reflection机制构造的不同的对象。
0 0
- 使用java Reflection机制使单例模式不再只有一个对象的实例
- java的reflection机制
- java的reflection机制
- 使用Java反射(Reflection)机制获取对象
- Java单例设计模式(实现Java的一个类只有一个对象)
- 关于JAVA的Reflection机制
- C++设计模式5--单例模式Singleton--当前对象只有一个实例
- C++设计模式5--单例模式Singleton--当前对象只有一个实例 .
- 只有一个实例的类
- 单例模式--只有一个实例
- 定义一个单例模式的类,在这个类中,只有唯一的实例,不能new出来其他的实例对象。
- 黑马程序员:单态设计模式static(使类在内存只有一个实例对象)
- 【Java】【TIJ】构建一个类:这个类只有一个对象(实例)
- 使用.Net Reflection 反射机制 动态获取对象字段内容的示例
- [Java] Reflection机制
- [Java] Reflection机制
- java反射机制reflection
- java反射机制--reflection
- Linux下TOP命令详解
- 阅读 jQuery 源码的18个惊喜
- redis单机安装
- 怎样和客户谈需求
- mysql 5.7 配置安装
- 使用java Reflection机制使单例模式不再只有一个对象的实例
- UIImageView常用操作
- android.mk文件解析
- python第三天
- 双边滤波的白话理解
- Hibernate之deleted object would be re-saved by cascade异常
- 回归博客
- Docker(三)
- cenos7虚拟机如何设置共享文件夹,并在Windows下映射网络驱动器?