上篇的反射创建的对象工厂也是一个工具类
编写工具类俩种方式:
一:
1.工具方法都设为非static方法
2.将工具类设计为单列模式
3.注意这种方式需要获取工具类对象(实例化)才能调用方法
二:
1.工具方法设计为static方法
2.工具 类所有构造方法都设计为private修饰
3.工具类本身以abstract修饰(目的就是只能用类调用方法,不能实例化)
/***************************对象调用方式****************************/
public class BeanFactory {
public BeanFactory(){
}
public <T>T getBeanFactory(String name,Class<T> checkType){
Object obj;
try {
Class<T> claz = (Class<T>) Class.forName(name);
obj = claz.newInstance();
if(!checkType.isInstance(obj)){
throw new IllegalArgumentException("参数类型不匹配");
}else{
return (T)obj;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
/**************************static方式*************************/
abstract public class BeanFactory {
private BeanFactory(){
}
public static <T>T getBeanFactory(String name,Class<T> checkType){
Object obj;
try {
Class<T> claz = (Class<T>) Class.forName(name);
obj = claz.newInstance();
if(!checkType.isInstance(obj)){
throw new IllegalArgumentException("参数类型不匹配");
}else{
return (T)obj;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
/*************************** 枚举方式*********************************/
枚举调用方式:
Date date2 = BeanFactory.INSTANCE.getBeanFactory("java.util.Date",Date.class);
package invokeBeanFactorty;
/**
* 利用java反射创建一个对象工厂 创建对象工厂模式 涉及到设计模式中的单列模式
* 最好用枚举的方式
* @author Administrator
*
*/
public enum BeanFactory {
INSTANCE;
public <T>T getBeanFactory(String name,Class<T> checkType){
Object obj;
try {
Class<T> claz = (Class<T>) Class.forName(name);
obj = claz.newInstance();
if(!checkType.isInstance(obj)){
throw new IllegalArgumentException("参数类型不匹配");
}else{
return (T)obj;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}