使用场景:对象创建的逻辑比较复杂,且对象种类较多。将创建对象的复杂逻辑放到对应工厂去实现。
优点:比简单工厂更符合开闭原则
缺点:如果创建对象的逻辑很简单,使用这种模式是过度设计
核心demo代码:
/**
* 工厂方法
* @author lq
* @version : RuleConfigSource.java, v 0.1 2022年12月13日 15:37 lq Exp $
*/
public class RuleConfigSource {
public RuleConfig load(String ruleConfigFilePath) {
String ruleConfigFileExtension = getFileExtension(ruleConfigFilePath);
IRuleConfigParserFactory parserFactory = RuleConfigParserFactoryMap.createParserFactory(ruleConfigFileExtension);
if (null == parserFactory) {
throw new InvalidRuleConfigException("rule config file format is not support: " + ruleConfigFilePath);
}
IRuleConfigParser parser = parserFactory.createParser();
String configText = "";
RuleConfig ruleConfig = parser.parse(configText);
return ruleConfig;
}
/**
* 解析文件名,获取扩展名
* @param ruleConfigFilePath
* @return
*/
private String getFileExtension(String ruleConfigFilePath) {
return "json";
}
}
/**
* 工厂的工厂
* @author lq
* @version : RuleConfigParserFactoryMap.java, v 0.1 2022年12月13日 16:11 lq Exp $
*/
public class RuleConfigParserFactoryMap {
private static final Map<String, IRuleConfigParserFactory> parserFactoryMap = new HashMap<>();
static {
parserFactoryMap.put("json", new JsonRuleConfigParserFactory());
parserFactoryMap.put("xml", new XmlRuleConfigParserFactory());
parserFactoryMap.put("yaml", new YamlRuleConfigParserFactory());
parserFactoryMap.put("properties", new PropertiesRuleConfigParserFactory());
}
public static IRuleConfigParserFactory createParserFactory(String type) {
if (StringUtils.isEmpty(type)) {
return null;
}
IRuleConfigParserFactory parserFactory = parserFactoryMap.get(type);
return parserFactory;
}
}
各类工厂demo:
public interface IRuleConfigParserFactory {
IRuleConfigParser createParser();
}
public class JsonRuleConfigParserFactory implements IRuleConfigParserFactory {
@Override
public IRuleConfigParser createParser() {
return new JsonRuleConfigParser();
}
}
public class PropertiesRuleConfigParserFactory implements IRuleConfigParserFactory {
@Override
public IRuleConfigParser createParser() {
return new PropertiesRuleConfigParser();
}
}
public class XmlRuleConfigParserFactory implements IRuleConfigParserFactory {
@Override
public IRuleConfigParser createParser() {
return new XmlRuleConfigParser();
}
}
public class YamlRuleConfigParserFactory implements IRuleConfigParserFactory {
@Override
public IRuleConfigParser createParser() {
return new YamlRuleConfigParser();
}
}
标签:parserFactoryMap,return,String,--,工厂,new,IRuleConfigParserFactory,设计模式,public
From: https://www.cnblogs.com/rbwbear/p/16979472.html