日拱一卒(二十三)

工厂模式

1.简单工厂模式(静态工厂方法模式):一个工厂类+一个产品基类+多个产品类;

优点:将复杂的对象构造过程封装到工厂类中,扩展性体现在对产品基类的继承上。

缺点:违反了开放封闭原则(对扩展开放,对修改关闭):增加子类的时候修妖修改工厂类。


  2.工厂方法模式:一个工厂基类+多个工厂类+一个产品基类+多个产品类;一个工厂子类对应于一个产品子类。

优点:解决了简单工厂模式的“开放封闭原则”,增加产品类的时候相应增加对应工厂类,无需改变工厂基类。

缺点:客户端需要判断实例化哪一个工厂来生产产品,增加了工作量。

3.抽象工厂模式:一个工厂基类+多个工厂类+多个产品基类+多个产品类;一个工厂类生产多个产品类,这几个产品类性质上存在相关性。

优点:(1)维护性好,如果开始的使用的工厂A下面的一系列产品,现在要切换成工厂B下面的产品,则需要切换工厂A为工厂B则可。

       (2)创建实例过程与客户端分离,客户端通过操作接口操作实例,具体产品类被封装到具体工厂类的方法中。

缺点:改动工作量大,如在工厂类中增加一种产品基类的方法,则需要改动:新增加的产品基类,新增加的产品类,

工厂基类的所有子类都要实现新增加产品基类的方法。

4.用简单工厂改进抽象工厂:使用一个静态工厂取代上面的静态工厂基类和工厂类,减少增加产品带来的工作量。


5. 利用反射+抽象工厂改进抽象工厂模式:

4中的简化增加了很多的switch...case,如果要增加产品类型,还是要改动switch...case的,利用反射可以很好地解决这一问题:通过全局的工厂类名 来控制如下

6.利用反射+配置文件改进抽象工厂模式:

通过一个配置文件控制5中包名和类名,可以在不重新编译的情况下,改变配置文件就可以切换程序的行为。

这样很好地去除了switch...if带来的耦合。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值