设计模式3之工厂模式

工厂模式有简单工厂、工厂方法、抽象工厂这三种。本文章将通过UML图分析这是三种模式的优缺点。

场景:一个Car接口,现在有两个实现类BMW、Audi。

1 不使用工厂的情况下

Test类需要知道Car接口和 new BMW、Audi这两个实现类。
每个需要用到实现类(如:BMW)的对象(如:Test)都需要new一个实现类,不符合 开闭原则。
如果很多地方都需要用到Car接口的实现类,那么就可使用一个工厂专门生成这些实现类的实例,
将不符合原则的代码进行封装,只提供符合原则的接口给程序使用,最大限度的减少了不符合原则的代码。


2 使用简单工厂

简单工厂模式也称为静态工厂模式--使用静态方法。
作用:通过接收不同的参数返回不同的实例。
优点(工厂模式的核心本质):
1.实例化对象,用工厂方法代替new操作。
2.将选择实现类、创建对象统一管理和控制。
3.调用者(Test)跟实现类解耦。
缺点:添加新的产品(Benz类--Car接口的实现类),需要修改已有的代码(工厂,CarFactory)。


3 工厂方法

工厂方法可以说是简单工厂的一个升级。
对比二者的UML图会发现,工厂方法与简单工厂的区别在于:
1.将CarFactory类改为CarFactoryImpl接口;
2.添加CarFactoryImpl接口的实现类----AudiFactory、BMWFactory。


优点:
解决了简单工厂模式因添加新产品需要修改文件的缺点。
但是由于工厂方法模式的 结构复杂度代码复杂度客户端编程难度都比简单工厂要大,
所有一般开发时都是使用简单工厂。
小结:
根据设计理论建议---工厂方法模式;
实际开发--简单工厂模式。


4 抽象工厂模式

抽象工厂模式用于解决:生产不同 产品族的全部产品。
缺点:和简单工厂一样,对增加新的产品,无能为力。
对比抽象工厂模式与对象工厂模式的UML图,发现区别:
工厂的实现类可以使用Seat、Engine等接口的实现进行交叉配置,形成一个新的产品族,同时对现有的代码影响不大。
但是新增一个产品tyre时,则需要修改工厂类中的代码(和简单工厂模式一样)。

5 源代码与UML图下载

源代码:http://download.csdn.net/detail/yy228313/9119815
UML图:http://download.csdn.net/detail/yy228313/9119819


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值