避免耦合的多文件格式的java句柄转换
我正在从事一个Java(RCP)项目,在该项目中,我需要将不同的源文件格式(我们称之为SF-1..N)转换为另外两种不同的目标格式(DF-a、DF-B) 现在输入文件可以是CSV、XLSX和XMLs(具有不同的模式)。应用程序应该找到正确的转换器,因此有必要读取文件内容。 每个转换器规范化文件内容并创建1。。N个DF对象的实例,这些对象转换为DF-A或DF-B记录
因此,我有一些转换器,它们获取文件内容并返回DFs对象的集合。每个转换器还应该能够判断文件内容是否是它支持的内容
我能想到的唯一策略是询问每个转换器是否支持文件内容,以及是否不尝试下一个转换器。如果没有合适的转换器,则向用户返回错误
我还可能被要求添加对新格式的支持,并且我希望能够添加更多转换器,而无需修改不必要的代码
我正在考虑在服务定位器对象中注册每个转换器,但我不确定如何以最小的耦合实现这一点。我曾考虑在静态初始值设定项中注册到服务定位器,但只有在加载类后才会调用它
我该怎么做?有没有更好的方法来实现我的目标
# 1 楼答案
M0skit0的答案是好的,但考虑到客户端不知道文件的类型,我会让转换器接口实现CanConvert方法
然后你可以简单地循环所有的转换器,询问他们是否可以转换文件,并使用第一个可以转换的
这还有一个优点,即您可以动态添加新的转换器,而无需更改枚举,因此可以在不重新编译应用程序的情况下添加它们
# 2 楼答案
在这种情况下,工厂设计看起来很合适
如果客户不知道文件类型,工厂可以修改如下: