表示对象数组的字段的封装

时间:2014-02-01 17:14:32

标签: java arrays parsing

我的类有一个字段,表示以不同方式实现某些接口的对象数组。更确切地说,数组中的每个对象都有一个解析某种类型文件的方法和一个返回相应支持的文件扩展名的方法。我的类也有一个Set,它通过解析文件来填充。

private MyInterface[] myArray = new MyInterface[] {

    new MyInterface() {
        @Override
        public void parseFile(File file){/*parsing TXT*/}
        @Override
        public String getSupportedFileExtension(){return "txt";}
    },

    new MyInterface() {
        @Override
        public void parseFile(File file){/*parsing XML*/}
        @Override
        public String getSupportedFileExtension(){return "xml";},

    },            
};

我采用这种方法的原因是将所有支持的文件解析功能保存在一段代码中。我希望这个数组可以在类内外使用。

如果我通过getter返回此数组,则存在将其设置为null的风险,例如并破坏程序。 所以问题是:

  1. 如果我让阵列最终是好还是有更好的方法?
  2. 这是一种很好的编程方法,还是应该避免使用这种方法?
  3. 其他人如何做这些事情?
  4. 谢谢!

1 个答案:

答案 0 :(得分:1)

最好的方法是使用factory pattern。 在您的情况下,您有一个工厂接收文件扩展名并返回一个实现文件解析接口的对象。 这样,您可以在以后添加更多解析器而无需更改代码,并且您只需要一个点来请求文件解析功能。

IFileparser parser = ParseFactory.getParser("text")
IContent content = parser.parseFile(file)

你可以扩充工厂以返回支持的文件扩展名,工厂知道它所拥有的所有实现。