我想为文件编写通用处理类。此类用于加载特定的处理程序实例,具体取决于传递给它的文件类型。
其中一种方法可以像这样工作(见评论):
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文件。还有一个想法是让主类引用一个可以加载处理程序模块的接口。也许这与某种模式相对应?
答案 0 :(得分:2)
这看起来像某种Abstract Factory Pattern 首先需要通过某些接口(例如
)为您的处理程序定义“契约”public interface Handler {
void handle(final File file);
}
然后您需要定义不同的处理程序; XMLHandler
,PropertiesHandler
等
现在你需要一个Factory来从文件扩展名(例如)给你一个处理程序实例,它的界面可能看起来像
public interface HandlerFactory {
Handler newHandler(final String fileName);
}
现在你只需要实现所有这些 - 例如HandlerFactory
可以从属性文件或类似文件读取扩展名 - >类关联。
答案 1 :(得分:1)
有许多模式与此相对应,但这是OOP中非常常见的任务。
在Java中,首先确定文件的类型。我会把它留给你。
然后使用ClassLoader加载和实例化相关的处理程序。
Typecast it,并继续使用它!
动态实例化是Java,C#等的一个很酷的功能。