Java 反射模式不好?

标签 java design-patterns reflection

假设我有很多类似的类(本例中为 RTS 中的单元), 即类 Unit 和子类 UnitAUnitBUnitC

所有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/

相关文章:

java - java中堆栈值与字符串的比较

java - 我的矩阵旋转有什么问题?

java - 模型类(在 MVC 中)应该使用静态方法还是实例方法?

mysql - 并行运行处理器时,我应该如何选择下一个要处理的项目?

c++ - 实例方法中的静态变量 - 如何解决?

c# - 反射(reflection):Assembly.GetExportedTypes 要求所有程序集都存在

java - 模块化工作定义

java - Java中字节数组的哈希

c# - 如何使用类型名称作为字符串转换为类型?

c# - 使用反射获取嵌套类型的容器类型