一、创建对象案例
在下面代码中,根据配置文件的后缀(json、xml、yaml、properties),选择不同的解析器(JsonRuleConfigParser、XmlRuleConfigParser……),将存储在文件中的配置解析成内存对象RuleConfig。
public class RuleConfigSource {
public RuleConfig load(String ruleConfigFilePath) {
String ruleConfigFileExtension = getFileExtension(ruleConfigFilePath);
IRuleConfigParser parser = null;
if ("json".equalsIgnoreCase(ruleConfigFileExtension)) {
parser = new JsonRuleConfigParser();
} else if ("xml".equalsIgnoreCase(ruleConfigFileExtension)) {
parser = new XmlRuleConfigParser();
} else if ("yaml".equalsIgnoreCase(ruleConfigFileExtension)) {
parser = new YamlRuleConfigParser();
} else if ("properties".equalsIgnoreCase(ruleConfigFileExtension)) {
parser = new PropertiesRuleConfigParser();
} else {
throw new InvalidRuleConfigException(
"Rule config file format is not supported: " + ruleConfigFilePath);
}
String configText = "";
//从ruleConfigFilePath文件中读取配置文本到configText中
RuleConfig ruleConfig = parser.parse(configText);
return ruleConfig;
}
private String getFileExtension(String filePath) {
//...解析文件名获取扩展名,比如rule.json,返回json
return "json";
}
}
二、创建对象案例分析
在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会用到工厂模式。
工厂模式定义:
封装对象的创建过程,将对象的创建和使用相分离。
工厂模式的作用:
(1) 控制复杂性(原本类):将创建代码抽离出来,让原本的函数或者类职责更单一,代码更简洁
(2) 代码复用(工厂类):创建代码抽离到独立的工厂类之后就可以复用
(3) 隔离复杂性(调用者):封装复杂的创建逻辑,调用者无需了解如何创建对象
(4) 封装变化(调用者):创建逻辑有可能变化,封装成工厂类之后,创建逻辑的变更对调用者更透明
比如开篇案例中,不同解析器的创建就可以使用工程模式。
三、简单工厂模式
1、定义:
定义一个创建对象的类,封装创建对象的行为。
2、案例:
开篇案例使用简单工厂模式的代码实现方式如下:
public class RuleConfigSource {
public RuleConfig load