概述
一个简单的案例,探究一下java多态的运用
demo
public static Parse createParser(String configFormat) throws Exception {
if (configFormat.isEmpty()||configFormat==null){
return null;
}
Parse parser = null;
if ("json".equalsIgnoreCase(configFormat)){
parser = new JsonParse();
}else if ("xml".equalsIgnoreCase(configFormat)){
parser = new XmlParse();
}else if ("yaml".equalsIgnoreCase(configFormat)){
parser = new YamlParse();
}
return parser;
}
看这样一段代码,它根据文件的的后缀名configFormat,去匹配不同的解析器
思路是这样的,首先设计一个父类,再则为每个if创建一个继承Parse父类的子类(工厂类),最后设计一个简单工厂类,将这些子类都放到简单工厂类中,这样一个就可以用多态和工厂模式解耦if…else了
首先设计一个父类
为每个if创建一个继承Parse父类的子类,
public class XmlParse extends Parse{
@Override
public IRuleConfigParser newInstanceRuleConfig() {
return new XmlRuleConfigParser();
}
}
public class YamlParse extends Parse{
@Override
public IRuleConfigParser newInstanceRuleConfig() {
return new YamlRuleConfigParser();
}
}
public class JsonParse extends Parse{
@Override
public IRuleConfigParser newInstanceRuleConfig() {
System.out.println("获取到json解析类!");
return new JsonRuleConfigParser();
}
}
再创建一个工厂类,这样直接调用方法获取相应的类就好了
public class RuleConfigParserFactory1 {
//将 parser 事先创建好缓存起来。当调用 createParser() 函数的时候,我们从缓存中取出 parser 对象直接使用
public static Map<String, Parse> map = new HashMap<>();
static {
map.put("json",new JsonParse());
map.put("xml",new XmlParse());
map.put("yaml",new YamlParse());
}
public static Parse getParser(String configFormat){
return map.get(configFormat);
}
如下,外层直接调用就好了
public static void main(String[] args) {
Parse json = getParser("json");
json.newInstanceRuleConfig();
}