使用Spring实现工厂方法模式

时间:2013-05-04 15:12:50

标签: java spring factory

我想了解如何使用spring实现以下工厂方法模式。

以下是不使用spring

的代码
interface FileParser {
      void parse()
}   

class XMLFileParser implements FileParser {
     void parse() {
     }
}

class PipeFileParser implements FileParser {
     void parse() {
     }
}

class FileParserFactory {

     FileParser getParserInstance(String fileType) {
     if("XML".equals(fileType)
              return new XMLFileParer();
            else 
              return new PipeFileParser();
  }
}

class ActivityHandler() {

     void handle(String fileType) {
     FileParser fileParer = FileParserFactory.getParerInstance(fileType);
     fileParser.parse();
  }
}

提前致谢。

1 个答案:

答案 0 :(得分:1)

我会创建一个bean FileParserFactory,它可以代表返回新的Parsers。 此外,这个工厂bean将具有map(fileType => Parser)和默认解析器

public class FileParserFactory {

 private Map<String, FileParser> fileParsers;
 private FileParser defaultParser;

 FileParser getParserInstance(String fileType) {
 if(fileParsers.containsKey(fileType))
          return fileParsers.get(fileType);
        else 
          return defaultParser;
}
public void setParsers(Map<String, FileParser> parsers) {
   filePaarsers = parsers;
} 

public void setDefaultParser(FileParser parser) {
   defaultParser = parser;
}
}

并在代码中:

@Inject FileParserFactory factory;

...

factory.getParser(fileType);

我假设可以重用解析器并且它们是线程安全的。

这个解决方案更通用,如果有必要可以扩展