Java - 调用类的所有方法

时间:2014-06-11 09:21:37

标签: 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类动态调用它们。这将使其更清洁,更容易扩展。我正在考虑使用像反射这样的东西,但它也不是一个真正的好解决方案。 关于如何正确实现这一点的任何想法?

2 个答案:

答案 0 :(得分:2)

创建Renderer界面。

创建一个包含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方法放在其中。

答案 1 :(得分:0)

您可以拥有一个定义方法的接口render,其中包含用于渲染您所用模板的逻辑。

一旦你拥有了它,你的所有渲染器都将实现该方法并具有所需的逻辑。最后,您可以按照this上一篇SO帖子的内容执行操作,以自动查找并初始化您的模板类。

对于增强功能,您还可以将上述内容与.properties文件或数据库结合使用,以允许某些模板无法自动启用或提供进一步的初始化参数。