设计具有可交换处理程序代码的通用处理程序类?

时间:2013-02-16 17:09:38

标签: java configuration indirection modularization

我想为文件编写通用处理类。此类用于加载特定的处理程序实例,具体取决于传递给它的文件类型。

其中一种方法可以像这样工作(见评论):

public void doSomething( File ) {
// 1) Determine file type.
// 2) Use a lookup to see if an appropriate handler exists.
// 3) If a handler exists, use handler to do something with the file.
}

如何设计主类?

P.S:我一直在考虑在构造函数或专用查找方法中读取属性或XML文件。还有一个想法是让主类引用一个可以加载处理程序模块的接口。也许这与某种模式相对应?

2 个答案:

答案 0 :(得分:2)

这看起来像某种Abstract Factory Pattern 首先需要通过某些接口(例如

)为您的处理程序定义“契约”
public interface Handler {
 void handle(final File file);
}

然后您需要定义不同的处理程序; XMLHandlerPropertiesHandler等 现在你需要一个Factory来从文件扩展名(例如)给你一个处理程序实例,它的界面可能看起来像

public interface HandlerFactory {
  Handler newHandler(final String fileName);
}

现在你只需要实现所有这些 - 例如HandlerFactory可以从属性文件或类似文件读取扩展名 - >类关联。

答案 1 :(得分:1)

有许多模式与此相对应,但这是OOP中非常常见的任务。

在Java中,首先确定文件的类型。我会把它留给你。

然后使用ClassLoader加载和实例化相关的处理程序。

Typecast it,并继续使用它!

动态实例化是Java,C#等的一个很酷的功能。