所有在用简单工厂的地方,都可以考虑用反射技术来去除switch或if,解除分支判断带来的耦合
可以通过枚举类来保存switch和if的条件–》与实例类对象 的一一映射
Enum(条件,类对象xxx.class)
switch或者if是程序里的好东西,但在应对变化上,却显得老态龙钟。
反射技术的确可以很好地解决它们难以应对变化,难以维护和扩展的诟病。
使用字符串作为参数变量,使得字符串字面量可以使用配置文件动态指定
无痴迷,不成功!
package design.patterns.factory;
/**
* 类名: factory
* 描述:
* 日期: 2022/6/29-11:09
* 这是一个绝妙的类
* @author 林建辉
*/
public class Factory {
private Factory() {
}
/**
* @param className
* 使用字符串作为参数变量,使得字符串字面量可以使用配置文件动态指定
* 被反射的类最好提供无参构造方法
* @param <T>
* @return
*/
public static <T> T getInstance(String className) {
T instance = null;
try {
instance = (T) Class.forName(className).getDeclaredConstructor().newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return instance;
}
/**
* @param clazz
* 具体实现子类的class对象
* 被反射的类最好提供无参构造方法
* @param <T>
* @return
*/
public static <T> T getInstance(Class<T> clazz) {
T instance = null;
try {
instance = (T) Class.forName(clazz.getName()).getDeclaredConstructor().newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return instance;
}
public static <T> T getInstance2(Class<T> clazz) {
T instance = null;
try {
instance = (T) clzz.getDeclaredConstructor().newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return instance;
}
}
你现在多努力一分,以后老婆就多漂亮一分!
欢迎下方留言评论交流!