设计模式之工厂模式
来源:互联网 发布:深圳市软件行业协会 编辑:程序博客网 时间:2024/06/17 21:11
目的:为了实现用户与所需对象相分离而引入简单工厂模式
原理:根据客户端传递给工厂的不同参数,创建不同的产品;当增加新产品时,需要增加产品类并修改工厂类,违反了OCP原则。
简单工厂模式层次结构类图:
StaticFactory是万能工厂类,可以创建用户所需要的各种对象。
适用范围:创建的对象比较少以及层次结构比较简单的程序。
2、工厂方法模式
目的:由于简单工厂模式无法解决复杂的多层次结构的问题,以及简单工厂模式使用的是静态方法作为工厂的方法,而静态方法是无法由子类继承,从而造成工厂的可扩展性受到限制,因此引入工厂方法模式。
原理:不同的工厂创建不同产品,每个工厂只能创建一类产品,当用户需要增加新的产品时,只需要继承父类接口,创建出新的工厂生产新的产品。
工厂方法模式层次结构类图:
每个工厂生产一种产品对象。多个工厂生产多种产品替代一个工厂生产多种产品(上帝工厂),当增加新的产品时,只需要创建一个继承抽象工厂的新的工厂,从而无需修改已有的代码,符合开—闭原则。
适用范围:客户无需知道对象的创建过程;客户需要使用的对象种类非常多,并且有扩展需要。
缺点:当存在大量的产品对象是,就会出现与之相对应的工厂对象,为了避免这种情况,可以将简单工厂模式和工厂方法模式结合起来使用。
3.抽象工厂模式
目的:因为工厂方法模式无法实现一个工厂生产多种产品,而抽象工厂模式具备一个工厂支持生产一个产品族的能力。
原理:一个工厂创建一个产品族(多个产品对象)。
抽象工厂模式层次结构类图:
适用范围:对一系列相关的产品对象进行设计并进行联合使用;当你提供了一个产品类库时,但是只想显示他们的接口而不是具体实现。
缺点:在一个产品族中扩展新的产品时是非常困难的,它需要修改抽象工厂的接口,违反了开—闭原则,从而使软件结构变得更复杂。
总结:
抽象工厂模式和工厂方法模式的区别:
(1)工厂方法模式是抽象工厂模式的一个极端情况,抽象工厂模式是工厂模式的一种推广。
(2)抽象工厂模式是用来创建多个产品的等级结构,而工厂方法模式是用来创建一个产品的等级结构,即工厂方法模式一般只有一个方法,创建一种产品,而抽象工厂模式一般有多个方法,用来创建一系列相关的产品。
(3)工厂方法模式只有一个产品抽象类,而抽象工厂方法有多个产品抽象类,工厂方法模式的具体工厂类只能创建一个具体的产品类;而抽象工厂模式可以创建多个。
注意:工厂的实现通常使用singleton模式,一个应用中一般每个产品系列只需要使用一个具体工厂的实例,所以工厂通常最好实现为一个singleton模式。
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之---工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之-工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之 ------工厂模式
- 设计模式之工厂模式
- 图像中带通滤波器和带阻滤波器的关系(带通图像)
- insertion-sort-list
- happens-before规则和as-if-serial语义
- python: Matplotlib 教程
- 剑指offer之求数组中最小的n个数
- 设计模式之工厂模式
- 常用的8种排序算法总结
- HTTPS 与 HTTP2 协议分析
- Leetcode-397. Integer Replacement
- Dubbo Provider无法找到
- android 隐藏statusbar
- 任意多边形费马点&点群中位中心求解
- Jmeter函数之_StringFromFile
- Discuz!积分记录表pre_common_credit_log中operation字段含义一览