0

我想为文件编写一个通用处理类。此类将根据传递给它的文件类型加载特定的处理程序实例。

里面的一种方法会像这样工作(见评论):

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.
}

如何设计主类?

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

4

2 回答 2

2

这看起来像是某种抽象工厂模式
您首先需要通过某些接口为您的处理程序定义“合同”,例如

public interface Handler {
 void handle(final File file);
}

然后您需要定义不同的处理程序;XMLHandler, PropertiesHandler, 等等。
现在你需要一个工厂来给你一个来自文件扩展名的处理程序实例(比如说),它的界面可能看起来像

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

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

于 2013-02-16T17:19:05.467 回答
1

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

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

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

对它进行类型转换,然后继续使用它!

动态实例化是 Java、C# 等的一个很酷的特性。

于 2013-02-16T17:16:27.887 回答