使用多态特性代替if...else语句

概述

一个简单的案例,探究一下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();
    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值