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

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

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

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

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

接着, 定义一个示例类

public class1 implements ISerivice{

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> classes
                = reflections.getSubTypesOf(IService.class).iterator();
        while(classes.hasNext()){
            Class class= classes.next();
// class.newInstance() 建议用工厂方法实现或者交给spring拖管
            map.put(class.newInstance().getName(), class);
        }

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

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

public class1 implements ISerivice{

private String name = "class2";

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

public String getName() {
return name;
}
}

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

你可能感兴趣的:(编程)