假设我有很多类似的类(本例中为 RTS 中的单元),
即类 Unit
和子类 UnitA
、UnitB
、UnitC
等
所有Unit类都有以下构造函数(包括Unit)
public class UnitX {
public UnitX(FileReader fr) {
...read parameters for constructing the unit...
}
}
包含参数的我的文件具有以下形式
UnitX params
UnitY params
....
创建文件中所有单元的列表将是一个类似于 while 循环
Class[] params = {FileReader.class};
while(fr has more to read) {
String unitType = fr.getString();
Unit u = (Unit)
java.lang.reflect.Constructor constr = Class.forName(unitType).getConstructor(params);
Unit u = (Unit)constr.newInstance(new Object[]{fr});
list.add(u);
}
我意识到当我从文件创建对象时我经常使用这种模式。 我的问题是,这是一个不好的模式吗?有更好的方法吗?
最佳答案
这是 factory pattern 的案例:
java.lang.reflect.Constructor constr = Class.forName(unitType).getConstructor(params);
Unit u = (Unit)constr.newInstance(new Object[]{fr});
可以改为
Unit u = UnitFactory.create( unitType, fr );
工厂是一个 if/else 列表。
关于Java 反射模式不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3108444/