设计模式之美--工厂模式之简单工厂
核心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;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现