某天胡思乱想的脑袋突然出现了个想法,之前接触过一个通用的builder模式工具类,就想单例bean工厂模式下是不是也可行,就抱着想法来了。
首先那要确保单例bean的获取,bean对象类的getInstance方法和私有化的构造函数必不可少; 然后又因为通用的builder模式是要用到 new 的,又想到java的反射,呲呲~这不就有了吗!
通过反射获取bean getInstance() 函数, 然后获取默认值这不就有了吗,来做出来实验下:
/**
* @author ljy on 2020/11/11
*/
public class SingleInstanceFactory {
/**
* 获取实例 - 已指定bean对象的获取实例方法名
* @param clazz
* @param <T>
* @return
*/
public static <T> T getInstance(Class<T> clazz){
return getInstance(clazz, "getInstance");
}
/**
* 获取实例 - DIY bean对象的获取实例方法名
* @param clazz
* @param methodName
* @param <T>
* @return
*/
public static <T> T getInstance(Class<T> clazz, String methodName){
T t = null;
try {
//反射获取指定函数对象
Method getInstance = Class.forName(clazz.getName()).getMethod(methodName);
//获取默认值并转换类型
t = (T) getInstance.getDefaultValue();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
return t;
}
}