3 抽象工厂模式概述

抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。抽象工厂模式定义如下:

       抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,它是一种对象创建型模式。

在抽象工厂模式中,每一个具体工厂都提供了多个工厂方法用于产生多种不同类型的产品,这些产品构成了一个产品族,抽象工厂模式结构如图5所示:

图5  抽象工厂模式结构图

在抽象工厂模式结构图中包含如下几个角色:

 ● AbstractFactory(抽象工厂):它声明了一组用于创建一族产品的方法,每一个方法对应一种产品。

  ● ConcreteFactory(具体工厂):它实现了在抽象工厂中声明的创建产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级结构中。

 ● AbstractProduct(抽象产品):它为每种产品声明接口,在抽象产品中声明了产品所具有的业务方法。

● ConcreteProduct(具体产品):它定义具体工厂生产的具体产品对象,实现抽象产品接口中声明的业务方法。

在抽象工厂中声明了多个工厂方法,用于创建不同类型的产品,抽象工厂可以是接口,也可以是抽象类或者具体类,其典型代码如下所示:

[java]  view plain copy
  1. abstract class AbstractFactory {
  2. public abstract AbstractProductA createProductA(); //工厂方法一
  3. public abstract AbstractProductB createProductB(); //工厂方法二
  4. ……
  5. }

具体工厂实现了抽象工厂,每一个具体的工厂方法可以返回一个特定的产品对象,而同一个具体工厂所创建的产品对象构成了一个产品族。对于每一个具体工厂类,其典型代码如下所示:

[java]  view plain copy
  1. class ConcreteFactory1 extends AbstractFactory {
  2. //工厂方法一
  3. public AbstractProductA createProductA() {
  4. return new ConcreteProductA1();
  5. }
  6. //工厂方法二
  7. public AbstractProductB createProductB() {
  8. return new ConcreteProductB1();
  9. }
  10. ……
  11. }

与工厂方法模式一样,抽象工厂模式也可为每一种产品提供一组重载的工厂方法,以不同的方式对产品对象进行创建。

    

思考

抽象工厂模式是否符合“开闭原则”?【从增加新的产品等级结构和增加新的产品族两方面进行思考。】

参考:当增加产品等级结构的时候,不符合“开闭原则”,如新添加AbstractProfuctC;

当增加新的产品族的时候,符合“开闭原则”,只需让产品继承相应的抽象产品,对象的工厂继承抽象工厂即可,而无需修改其他的代码。

【作者:刘伟 http://blog.csdn.net/lovelion

抽象工厂模式(三):抽象工厂模式概述相关推荐

  1. 工厂模式——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)...

    工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Factory):不利于产生系列产品: 2)工厂方法模式(Factory Method):又称为多形性工厂: 3) ...

  2. STM32单片机的启动模式 三种BOOT模式介绍

    在绘制32单片机时,参考别人的原理图对单片机的启动方式BOOT有疑问, 这里写目录标题 自己的理解和应用 一.三种BOOT模式启动的介绍 二.自己开发BOOT模式的选择 官方的文档介绍 自己的理解和应 ...

  3. 《深入设计模式》笔记 -创建型模式三、生成器模式(建造者模式)

    生成器模式 亦称:建造者模式.Builder 意图 生成器模式是一种创建型设计模式, 使你能够分步骤创建复杂对象. 该模式允许你使用相同的创建代码生成不同类型和形式的对象. 问题 假设有这样一个复杂对 ...

  4. 【OS学习笔记】十五 保护模式三:保护模式下的内存访问机制

    上一篇文章学习了段描述符与段描述符各个标志位的含义:段描述符 本篇文章学习如何进入保护模式,并学习如何在保护模式下进行内存访问. 1.如何进入保护模式 假设我们已经用汇编语言将段描述符安装到GDT中( ...

  5. Android工厂设计模式(简单工厂,工厂方法,抽象工厂,BitmapFactory简单工厂分析,Retrofit抽象工厂分析)

    文章目录 创建型设计模式(简单工厂,工厂方法,抽象工厂) 一.简单工厂模式 引出简单工厂模式 二.工厂方法模式 三.抽象工厂模式 Android源码中用到的工厂模式举例 一.BitmapFactory ...

  6. vmware虚拟机 配置动态 静态 固态IP 三种模式: 桥接模式 nat模式和仅主机模式 Host-only模式

    目录 目录 一. 安装了图形化桌面操作系统时 一.桥接模式 二.nat模式 三.host-only模式 二.没有桌面操作系统时(centos 7) 1.Bridged模式(桥接模式) 2.Nat模式( ...

  7. Flink的三种执行模式STREAMING和BATCH和AUTOMATIC

    执行模式 执行模式三种 BATCH模式的两种配置方法 什么时候选择BATCH模式

  8. linux文件编辑器的三种模式,Linux中文本编辑器三种工作模式切换及vi编辑器三种工作模式下命令详解...

    文本编辑器的作用 创建或修改文本文件 维护Linux系统中的各种配置文件 Linux中最常用的文本编辑器 Linux中最常用的文本编辑器 vi:类UNIX操作系统的默认文本编辑器 vim:vim时vi ...

  9. stm32f103c6t6下的HAL库搭建三种低功耗模式及实战分析(stm32通用)

    目录 三种低功耗模式介绍 睡眠模式(sleep mode) 停止模式(stop mode) 待机模式(standby mode) 总结 实战测试 个别电路原理图 功耗分析 ADC功耗大解决方案 ADC ...

  10. 状态模式与责任链模式

    文章目录 一.状态模式 二.责任链模式 三.状态模式与责任链模式对比 一.状态模式 状态模式定义:当一个对象的内在状态改变时允许其改变行为,这个对象看起来像是改变了其类.也就是说类中的状态改变了,再调 ...

最新文章

  1. eclipse: Program g++ not found in PATH
  2. 【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 源码分析 | 创建 Protobuf 对象 )
  3. 判断用户是否存在再进行新增_基于tableau从商业分析模型角度对业务数据进行多维度分析--【商业分析类】...
  4. 【POJ - 1703】Find them, Catch them(带权并查集之--种类并查集 权为与父节点关系)
  5. VirtualBox 虚拟机的网络设置
  6. Spring 事务与脏读、不可重复读、幻读
  7. 用好这个新功能,报表数据安全瞬间提升一个等级!
  8. 在C语言中如何让常量起作用,解析C语言中如何正确使用const
  9. android app 提高级别,android 关于提高第三方app的service优先级
  10. TCP的可靠传输机制
  11. POM思想__多个页面时进行的处理
  12. 删除linux系统中的eth0.bak与多余的网卡
  13. FZU Problem 2168 防守阵地 I
  14. Cython 的学习
  15. Javascript数据类型,类型转换
  16. offset,client,scroll的学习记录
  17. 用c语言向无盘符分区拷文件,用GHOST软件将PC硬盘上C分区制作成映象文件﹡.gho的步骤...
  18. 利用Windows11安卓子系统对APP进行渗透测试
  19. 熊绎:我看软件工程师的职业规划(转载)
  20. 《那些年啊,那些事——一个程序员的奋斗史》——66

热门文章

  1. SAP 各模块常用的BAPI
  2. android自动连接到指定wifi
  3. 批量启动docer容器shell脚本
  4. 软件安全建设【学习笔记】
  5. 使用docker搭建DVWA
  6. HDU-6121 Build a tree - 2017 Multi-University Training Contest - Team 7(完全K叉树)
  7. CentOS7转发非3306端口到3306端口
  8. linux的双系统修复工具下载,EasyBCD(系统引导修复工具)
  9. [Java 基础] 深入理解List的toArray()方法和toArray(T[] a)方法
  10. HTTP–Response详解