一种比if-else和switch更符合开闭原则的方法

大家想必写过类似这样的代码:

if () {}
else if() {}
else if(){}
......

当条件多时代码显得非常冗长,而且每次添加条件时需要修改主流程的代码。这样就破坏了类的开闭原则。基于此,我们可以采用另一种比较优雅的实现方式,
首先,定义一个接口, 这个接口很重要,是用来替代if-else的关键。

interface ISerivice<K, V> {
String getName();
K doSomething(V v);
}

接着, 定义一个示例类

public class1 implements ISerivice<String, Integer>{

private String name = "class1";

public String doSomething(Integer param){
System.out.println("我是class1");
}

public String getName() {
return name;
}
}

下一步,写初始化的代码,将实现了IService接口的类(Class对象)都放进map中,key为name.

 Reflections reflections = new Reflections("此处应有包名");
        Iterator<Class<? extends Service>> classes
                = reflections.getSubTypesOf(IService.class).iterator();
        while(classes.hasNext()){
            Class<? extends IService> class= classes.next();
// class.newInstance() 建议用工厂方法实现或者交给spring拖管
            map.put(class.newInstance().getName(), class);
        }

如果要用到某个类,只需要给出类的name属性即可得到该类的Class对象。接下来就是调用doSomething()方法了。

那么如果以后要再加一个类Class2怎么办呢,很简单,只需要这样:

public class1 implements ISerivice<String, Integer>{

private String name = "class2";

public String doSomething(Integer param){
System.out.println("我是class2");
}

public String getName() {
return name;
}
}

然后:
map.get(“class2”) 就可以得到相应的Class对象了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值