【设计模式】(二)工厂模式
来源:互联网 发布:淘宝怎么申请二次售后 编辑:程序博客网 时间:2024/05/16 18:58
上文我们介绍了《【设计模式】(一)单例模式》
工厂模式分3类:简单工厂,工厂方法,抽象工厂。
本文从核心本质、分析、模式对比、应用场景、图形分析等方面做对比分析。
一. 工厂模式
实现了创建者和调用者的分离
二. 核心本质
实例化对象,用工厂方法代替new操作
将选择实现类,创建对象统一管理和控制。从而将调用者跟实现类解耦。
三. 详细分类
1. 简单工厂/静态工厂
工厂类一般是使用静态方法。通过接收的参数的不同来返回不同的对象实例。
用来生产同一等级结构中的任意产品。
对于增加新的产品,需要修改已有代码
不符合设计原则,但实际使用最多
2. 工厂方法
用来生产同一等级结构的固定产品(支持增加任意产品)
为了避免简单工厂的缺点,不完全满足OCP。和简单工厂最大的区别:简单工厂只有一个工厂类(对一个项目或者一个独立模块而言)工厂方法模式有一组实现了相同接口的工厂类。
3. 抽象工厂
用来生产不同产品族的全部产品
不可以增加新产品,支持增加产品族
是工厂方法的升级版本,适用于:多个业务品种,业务分类时
四. 简单工厂模式PK工厂方法
1. 结构复杂度
简单工厂:结构简单,只需要一个工厂类。工厂方法:工厂类随着产品类个数的增加而增加。从而增加结构复杂度
2. 代码复杂度(与结构复杂度,恰好相反)
简单工厂:工厂类随着产品类的增加而增加很多方法/代码,故较复杂工厂方法:每个具体工厂类只完成单一任务,代码简洁。
3. 客户端编程难度
简单工厂:较简单。工厂类是个静态类,在客户端无需实例化。工厂方法:较复杂。工厂类结构中引入了接口从而满足了OCP,但客户端编码中需要对工厂类进行实例化。
4. 管理上的难度
1) 扩展性
简单工厂:不满足OCP,需要通过修改工厂类代码,来实现扩展性。不拘泥于理论,较常用。工厂方法:完全满足OCP,即具有良好的扩展性。
2) 维护性
简单工厂:多个产品类需要修改时,只需要修改唯一的工厂类工厂方法:若某个具体产品类需要需改,则需要修改对应的工厂类。当同事需要修改多个产品类时,则对多个工厂类的修改变得非常复杂。
根据设计理论建议:工厂方法。但,设计上我们一般用简单工厂。
五. 应用场景
1. 工厂模式
JDK中Calendar的getInstance方法JDBC中Connection对象的获取Hibernate中SessionFactory创建SessionSpring中IOC容器创建管理bean对象XML解析时,DocumentBuilderFactory创建解析器对象反射中Class对象的newInstance()
六. 图形对比
1. 简单工厂
2. 工厂方法
3. 抽象工厂
0 0
- 【设计模式】(二)工厂模式
- 二.设计模式-工厂模式
- 设计模式--工厂设计模式(二)
- 设计模式<二>-抽象工厂
- 设计模式之 工厂模式(二) 抽象工厂模式
- 设计模式(二)工厂方法模式+抽象工厂模式
- 设计模式之工厂模式(二)之工厂方法模式
- 设计模式(二)工厂模式:简单工厂模式
- 二 设计模式之工厂方法模式
- 设计模式二--工厂方法模式
- 设计模式之二:简单工厂模式
- 设计模式学习系列二:工厂模式
- 设计模式(二)---工厂模式
- 设计模式之工厂模式二
- 设计模式之二:工厂方法模式
- 设计模式-工厂模式(二)
- 设计模式之工厂模式 (二)
- java设计模式之二工厂模式
- 剑指offer—二维数组的查找
- ViewPageer用PagerTabStrip实现导航
- POJ 2594 Treasure Exploration (floyd判断联通+最小路径覆盖)
- hdu-5489(2015网络赛合肥赛区)***
- 字节序--大端模式和小端模式
- 【设计模式】(二)工厂模式
- ViewPager与Fragment结合使用
- 【设计模式】(三)建造者
- 【设计模式】(四)原型
- ViewPager与ActionBar结合实现导航
- Android之旅(一):搭建Android开发环境
- 在同一个类中重载方法的互相调用
- 向过去的一切告一段落
- 剑指offer—替换空格