工厂模式
1.简单工厂模式(静态工厂方法模式):一个工厂类+一个产品基类+多个产品类;
优点:将复杂的对象构造过程封装到工厂类中,扩展性体现在对产品基类的继承上。
缺点:违反了开放封闭原则(对扩展开放,对修改关闭):增加子类的时候修妖修改工厂类。
2.工厂方法模式:一个工厂基类+多个工厂类+一个产品基类+多个产品类;一个工厂子类对应于一个产品子类。
优点:解决了简单工厂模式的“开放封闭原则”,增加产品类的时候相应增加对应工厂类,无需改变工厂基类。
缺点:客户端需要判断实例化哪一个工厂来生产产品,增加了工作量。
3.抽象工厂模式:一个工厂基类+多个工厂类+多个产品基类+多个产品类;一个工厂类生产多个产品类,这几个产品类性质上存在相关性。
优点:(1)维护性好,如果开始的使用的工厂A下面的一系列产品,现在要切换成工厂B下面的产品,则需要切换工厂A为工厂B则可。
(2)创建实例过程与客户端分离,客户端通过操作接口操作实例,具体产品类被封装到具体工厂类的方法中。
缺点:改动工作量大,如在工厂类中增加一种产品基类的方法,则需要改动:新增加的产品基类,新增加的产品类,
工厂基类的所有子类都要实现新增加产品基类的方法。
4.用简单工厂改进抽象工厂:使用一个静态工厂取代上面的静态工厂基类和工厂类,减少增加产品带来的工作量。
5. 利用反射+抽象工厂改进抽象工厂模式:
4中的简化增加了很多的switch...case,如果要增加产品类型,还是要改动switch...case的,利用反射可以很好地解决这一问题:通过全局的工厂类名 来控制如下
6.利用反射+配置文件改进抽象工厂模式:
通过一个配置文件控制5中包名和类名,可以在不重新编译的情况下,改变配置文件就可以切换程序的行为。
这样很好地去除了switch...if带来的耦合。