核心demo代码:
public class RuleConfigParserFactory {
public static IRuleConfigParser createParser(String configFormat) {
IRuleConfigParser parser = null;
if ("json".equalsIgnoreCase(configFormat)) {
parser = new JsonRuleConfigParser();
} else if ("xml".equalsIgnoreCase(configFormat)) {
parser = new XmlRuleConfigParser();
} else if ("yaml".equalsIgnoreCase(configFormat)) {
parser = new YamlRuleConfigParser();
} else if ("properties".equalsIgnoreCase(configFormat)) {
parser = new PropertiesRuleConfigParser();
}
return parser;
}
}
/**
* 简单工厂
* @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);
IRuleConfigParser parser = RuleConfigParserFactory.createParser(ruleConfigFileExtension);
if (null == parser) {
throw new InvalidRuleConfigException("rule config file format is not support: " + ruleConfigFilePath);
}
String configText = "";
RuleConfig ruleConfig = parser.parse(configText);
return ruleConfig;
}
/**
* 解析文件名,获取扩展名
* @param ruleConfigFilePath
* @return
*/
private String getFileExtension(String ruleConfigFilePath) {
return "json";
}
}
简单工厂和单例模式的组合使用demo
/**
* 简单工厂和单例模式的结合
* @author lq
* @version : RuleConfigParserAndSingletonFactory.java, v 0.1 2022年12月13日 15:34 lq Exp $
*/
public class RuleConfigParserAndSingletonFactory {
private static final Map<String, IRuleConfigParser> ruleConfigParserMap = new HashMap<>();
static {
ruleConfigParserMap.put("json", new JsonRuleConfigParser());
ruleConfigParserMap.put("xml", new XmlRuleConfigParser());
ruleConfigParserMap.put("yaml", new YamlRuleConfigParser());
ruleConfigParserMap.put("properties", new PropertiesRuleConfigParser());
}
public static IRuleConfigParser createParser(String configFormat) {
if (StringUtils.isEmpty(configFormat)) {
return null;
}
IRuleConfigParser parser = ruleConfigParserMap.get(configFormat);
return parser;
}
}
其他类demo:
public interface IRuleConfigParser {
/**
* 解析文件
* @param configText
* @return
*/
RuleConfig parse(String configText);
}
public class RuleConfig {
}
public class JsonRuleConfigParser implements IRuleConfigParser {
@Override
public RuleConfig parse(String configText) {
return null;
}
}
public class PropertiesRuleConfigParser implements IRuleConfigParser {
@Override
public RuleConfig parse(String configText) {
return null;
}
}
public class XmlRuleConfigParser implements IRuleConfigParser {
@Override
public RuleConfig parse(String configText) {
return null;
}
}
public class YamlRuleConfigParser implements IRuleConfigParser {
@Override
public RuleConfig parse(String configText) {
return null;
}
}
标签:return,String,--,parser,工厂,new,IRuleConfigParser,设计模式,public
From: https://www.cnblogs.com/rbwbear/p/16979431.html