java反射机制与简单工厂模式
程序员文章站
2024-01-20 11:29:40
...
利用Java的反射机制可以解决工厂模式的工厂方法爆炸性扩充问题,原理是:
工厂不需要管理传入的String标志着哪一个对象,只需要根据String参数反射获取对象即可。
interface IMessage{
public void send();
}
class AMessage implements IMessage{
@Override
public void send() {
System.out.println("这个是A消息");
}
}
class BMessage implements IMessage{
@Override
public void send() {
System.out.println("这是B消息");
}
}
class Factory{
private Factory(){};
public static IMessage messageFactor(String className){
IMessage instance=null;
try {
instance =(IMessage) Class.forName(className).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return instance;
}
}
但是随之而来就产生了如果我们要新增一个接口的,我们又需要在Factory类里面新增对应接口的工厂方法。那么我们可以利用泛型解决这个问题。
public static <T> T Factor(String className,Class<T> clazz){//clazz用来确定泛型以及泛型返回值
T t=null;
try {
t =(T) Class.forName(className).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return t;
}
这里的clazz并未使用,但是可以由客户端传入参数确定泛型类型。