java - 使用 Spring 实现工厂方法模式

标签 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();
  }
}

提前致谢。

最佳答案

我将创建一个 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.getParser(fileType);

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

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

关于java - 使用 Spring 实现工厂方法模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16375761/

相关文章:

java - 如何在JAVA中获取NEO4J Cypher Query的结果值

java - Android - 为什么 Activity 在点击通知后打开?

java - AccessLevel 无法解析为变量

security - Spring + Tomcat URL白名单防止命令注入(inject)

java - Spring Boot application.properties 值未填充

c++ - 从工厂创建的实例访问派生类的成员

java - env.getProperty 不工作 Spring PropertyPlaceholderConfigurer

java - 奇数乘以一个字符的整数

c# - 如何以更清洁的方式处理大型工厂

python - 如何 split() 字符串并将其传递给对象的 __init__() 方法?