Java - 调用类的所有方法

标签 java design-patterns reflection

我目前正在开发一个必须渲染多个 Freemarker 模板的应用程序。到目前为止,我有一个处理渲染的 Generator 类。这个类看起来或多或少像这样:

public class Generator {
     public static void generate(…) {
         renderTemplate1();
         renderTemplate2();
         renderTemplate3();
    }
    private static void render(…) {
         // renders the template
    }
    private static void renderTemplate1() {
         // Create config object for the rendering
         // and calls render();
    };
    private static void renderTemplate1() {
         // Create config object for the rendering
         // and calls render();
    };
    …
}

这可行,但感觉不太对劲。我想做的是创建一个包含所有 renderTemplate...() 方法的类,然后从我的 Generator 类动态调用它们。这将使它更干净并且更容易扩展。我正在考虑使用反射之类的东西,但它也不是一个很好的解决方案。 关于如何正确实现这一点有什么想法吗?

最佳答案

创建一个渲染器接口(interface)。

创建一个包含 Renderer 实现的数组。

遍历数组调用它们。

 interface Renderer {
      void renderTemplate();
 }

 static final Render[] renderers = new Render[] {
    new Renderer {
         public void renderTemplate() {
             // Create config object for the rendering of 1
             // and calls render();
          }
    },
    new Renderer {
         public void renderTemplate() {
             // Create config object for the rendering of 2
             // and calls render();
          }
    },

 }

 public static void generate() {
    for (Renderer r: renderers) {
        r.renderTemplate();
    }
 }

如果所有 Renderer 实现共享该方法,您可能需要考虑将 Renderer 设为一个抽象类,并将 Render 方法放入其中。

关于Java - 调用类的所有方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24159156/

相关文章:

c# - 如何将行为移到单独的类中

Java - 如何为两个类设计一个通用方法

java - 限制对象创建的策略或设计模式

c# - 如何使用反射确定属性类型?

java - 在方法调用期间将数组作为参数传递时出现 IllegalArgumentException

未启用 SMB 1.0/CIFS 兼容性的 Java SMB 文件共享

java - JAXB 解码 : child elements are null

java - 如何使用 apache poi 打破 Excel 单元格中的文本

go - 反射(reflect)返回值

java - 将 Swing 组件绑定(bind)到 Java 对象