我想了解如何使用 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/