工厂模式分为:静态工厂、工厂方法、抽象工厂。
工厂模式好处(我想到的):
1、对象统一管理,重复使用,修改方便(改一处,多处同时改动)
2、对象的产生和使用分离(客户不关心创建的细节,只关心如何使用”单一职责链原则”)
以前看静态工厂方法大部分是这样的(这里主要不研究工厂模式)
public class FactoryDemo{ public static Person createPerson(String typeName){ if(typeName.equals("student")){ return new Student(); }else if(typeName.equals("teacher")){ return new Teacher(); } } }
但是我就在想,如果Person接口的实现类非常多,那么这个工厂不是显得十分臃肿吗?
工厂模式有解决的方法(这里不多说),我只说当时我的一些想法,这里传的参数都是变化的,我能传不变的参数进来吗?
于是想到了反射,于是我做如下修改:
public class PersonFactory{ public static Person createPerson(Class demo) throws Exception{ if(Person.class.isAssignableFrom(demo)){ Person p = (Person)demo.newInstance(); return p; }else{ throw new RuntimeException("该工厂无法生产非Person接口实现类"); } } }
这样的话这个工厂就不需要变化
如果要获得Student对象,只需要调用PersonFactory.createPerson(Student.class)即可
如果要获得Teacher对象,只需要调用PersonFactory.createPerson(Teacher.class)即可