1

我想了解如何使用 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();
  }
}

提前致谢。

4

1 回答 1

1

我将创建一个 bean FileParserFactory,它将负责返回新的解析器。此外,该工厂 bean 将具有映射 (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);

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

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

于 2013-05-04T16:26:11.880 回答