java反射机制 创建单例工厂

package Reflect;
/*如何编写工具类:
 * 方法一:
 * 1.把工具方法做成非static方法,
 * 2.把工具类做成单例的。
 * 那么要调用工具方法,必须先得到工具类。再调用方法
 * 方法二:
 * 1.把工具方法做成static方法
 * 2.把工具类所有构造器全部私有化,或者把工具加上abstract的。
 * 这么做的目的就是为了全部是类去调用工具方法。
 * 
 * */
//根据反射的对象工厂,专门用来生成对象。为了使其他方法类也可以使用该方法,特意将该方法抽取到该类中。
//单例模式:Enum
public enum BeanFactory {
	INSTANCE;
	public  <T>T getBean(String className,Class<T> checkType){						
		try {
			Class<T> clz=(Class<T>) Class.forName(className);
			Object obj = clz.newInstance();
			//需要检查checkedType是否是obj的字节码对象。
			if(!checkType.isInstance(obj)){
				throw new IllegalArgumentException("对象和类型不兼容");
			}
			return (T)obj;
		} catch (Exception e) {			
			e.printStackTrace();
		} 
		return null;
		
	}
}

调用测试如下:

import java.util.Date;

public class CreateInstanceDemo {
	public static void main(String[] args) throws Exception {
		Date d= BeanFactory.INSTANCE.getBean("java.util.Date", Date.class);
		System.out.println(d.toLocaleString());
		
	}
}

猜你喜欢

转载自programmer-q.iteye.com/blog/2255985