提出问题
试想在简单工厂模式中如果添加实现类到现有的系统中,那么就需要修该工厂类,因为修改方式很简单,在这里就不举例了。如果每次都这样做,也太那个啥了。。。
解决问题
在这里有一种解决方案就是使用配置文件,当有了新的实现类后,只要在配置文件里配置上新的实现类就好了。可以利用反射或者Ioc/DI(控制反转/依赖注入)来实现。
工厂实现如下:
public class Factory2{
public static People CreatePeople() {
Properties pro = new Properties();
People people = null;
InputStream ins;
ins = Factory2.class.getResourceAsStream("factory.properties");
try {
pro.load(ins);
} catch (IOException e1) {
e1.printStackTrace();
}
String implClassStr = pro.get("implClass").toString();
try {
Class cla = Class.forName(implClassStr);
people = (People) cla.newInstance();
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return people;
}
}
其它的实现类和接口读者可以参考上篇文章。
=======================================
<以上类容均来自于《研磨设计模式》, author:陈臣 & 王斌>