设计模式---工厂模式

来源:互联网 发布:韩美林 知乎 编辑:程序博客网 时间:2024/06/07 09:52

实现了创建者与调用者的分离。
分类:简单工厂模式、工厂方法模式、抽象工厂模式。

1.简单工厂模式
简单工厂模式也叫静态工厂模式,就是工厂类一般使用静态方法,通过接收参数的不同来返回不同的实例对象。缺点是对于新增加的产品扩展性不好。
类图如下:

这里写图片描述

2. 工厂方法模式
定义了一个创建对象的接口,但由子类决定是实例化哪一个。与简单工厂模式最大的区别是简单工厂模式只有一个工厂类,而工厂方法模式有一组实现了相同接口的工厂类。类图如下:

这里写图片描述

3. 抽象工厂模式

每一个模式都是针对一定问题的解决方案。抽象工厂模式与工厂方法模式的最大区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则需要面对多个产品等级结构。
  在学习抽象工厂具体实例之前,应该明白两个重要的概念:产品族和产品等级。
  所谓产品族,是指位于不同产品等级结构中,功能相关联的产品组成的家族。比如AMD的主板、芯片组、CPU组成一个家族,Intel的主板、芯片组、CPU组成一个家族。而这两个家族都来自于三个产品等级:主板、芯片组、CPU。一个等级结构是由相同的结构的产品组成,示意图如下:
这里写图片描述
上面所给出的三个不同的等级结构具有平行的结构。因此,如果采用工厂方法模式,就势必要使用三个独立的工厂等级结构来对付这三个产品等级结构。由于这三个产品等级结构的相似性,会导致三个平行的工厂等级结构。随着产品等级结构的数目的增加,工厂方法模式所
给出的工厂等级结构的数目也会随之增多。如下图:
这里写图片描述

    那么,是否可以使用同一个工厂等级结构来对付这些相同或者极为相似的产品等级结构呢?当然可以的,而且这就是抽象工厂模式的好处。同一个工厂等级结构负责三个不同产品等级结构中的产品对象的创建。
这里写图片描述
  可以看出,一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象。显然,这时候抽象工厂模式比简单工厂模式、工厂方法模式更有效率。对应于每一个产品族都有一个具体工厂。而每一个具体工厂负责创建属于同一个产品族,但是分属于不同等级结构的产品。

总结:
简单工厂模式(静态工厂模式):虽然某种程度不符合设计规则,但是实际使用得最多
工厂方法模式:在不修改已有类的前提下,通过增加新的工厂类实现扩展
抽象工厂模式:不可以增加产品,可以增加产品族

应用场景:JDBC中获取Connetcion对象,Hibernate中SessionFactory创建Sesssion,Spring容器中创建Bean等等。