在本讲,我们来学习一下创建型模式里面的第三个设计模式,即抽象工厂模式。

前言

前面介绍的工厂方法模式中考虑的是一类产品,如畜牧场只养动物、电视机厂只生产电视机(不生产空调、冰箱等其它的电器)、计算机学院只培养计算机软件专业的学生等。

这些工厂只生产同种类产品,而同种类产品又被称为同等级产品,也就是说,工厂方法模式只考虑生产同等级的产品,但是在现实生活中许多工厂都是综合型的工厂,能生产多等级(种类) 的产品,如电器厂既生产电视机又生产洗衣机或空调,苹果代工厂既生产苹果电脑又生产苹果手机或苹果iPad,大学既有软件专业又有生物专业等。

本讲要介绍的抽象工厂模式将考虑多等级产品的生产,将同一个具体工厂所生产的位于不同等级的一组产品称为一个产品族。这句话大家可能不是特别好理解,有点绕是不是?但没关系,下面我们来看一张图,相信大家就能很好地理解了。

上图所示横轴是产品等级,也就是同一类产品,从图中可以看到不管是一体机,还是笔记本,还是台式机,它们都是同一级别的产品,即电脑;纵轴是产品族,也就是同一品牌的产品,同一品牌的产品产自同一个工厂,例如苹果代工厂既生产苹果电脑又生产苹果手机或苹果iPad,生产出的这些产品就属于同一个产品族。

经过以上分析,相信大家对产品族和产品等级这两个概念有了一定的认识,接下来,我们再来看一张图,以便加深理解。

先来看左边部分,这部分的东东都是属于同一个产品族的,里面包含有外套、领带、衬衫、西裤、皮鞋等等这些产品,很明显能感受到这个产品族是属于商务风格的。再来看右边部分,这部分的东东同样属于同一个产品族,里面包含有运动上衣、毛衫、运动裤子、运动鞋等等这些产品,看得出来这个产品族是属于运动风格的。

那么在上面这张图中,如何去体现同级别的产品呢?同级别的产品就是同种类的产品,这点大家要知道哟!

商务风的上衣是上衣,运动风的上衣它也是上衣,所以它们属于同级别的产品。再比如鞋子,皮鞋和运动鞋就属于不同产品族里面的同种类产品。

至此,通过上面两张图我就为大家讲清楚了产品族和产品等级这两个概念,大家好好消化一下。

理解清楚以上概念之后,下面我就要为大家讲解抽象工厂模式了。

抽象工厂模式

概念

抽象工厂模式是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。

这概念真的蛮不好理解的,下面我用自己的话给大家详细解释一下。

先看前半段话,什么意思呢?创建对象肯定是由工厂来创建的,那工厂创建的又是哪些对象呢?一组相关的或者相互依赖的对象。例如,我现在开了一个服装工厂去生产运动风格的服装,那么不管是上衣还是内衣还是裤子还是鞋,这些就构成了一组相关的产品。

再来看后半段话,什么意思呢?我现在的服装工厂生产的是运动风格(运动风格指的就是产品族哟

从零开始学习Java设计模式 | 创建型模式篇:抽象工厂模式相关推荐

  1. 从零开始学习Java设计模式 | 创建型模式篇:原型模式

    在本讲,我们来学习一下创建型模式里面的第四个设计模式,即原型模式. 概述 原型模式就是指用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象. 这段话读起来有点绕,是不是? ...

  2. 从零开始学习Java设计模式 | 创建型模式篇:建造者模式

    在本讲,我们来学习一下创建型模式里面的最后一个设计模式,即建造者模式. 概述 建造者模式是指将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示. 读完这句话之后,我估计很多人都已经懵 ...

  3. 设计模式系列一创建型之(抽象工厂模式)

    1.抽象工厂简介 在软件系统中,经常面临着"一系列相互依赖的对象"的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作. 如何应对这种变化? 如何绕过常规的对象的创建方 ...

  4. Java设计模式笔记(3)抽象工厂模式

    抽象工厂模式:为创建一组相关的或者相互依赖的对象提供一个接口,而且无需指定他们的具体类. 抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种.业务分类时,通过抽象工厂模式产生需要的对象是一种非常好 ...

  5. 从零开始学习Java设计模式 | 软件设计原则篇:开闭原则

    从本讲开始,咱们就要开始学习第一章中的第三部分内容,即软件设计原则了. 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件 ...

  6. 从零开始学习Java设计模式 | 软件设计原则篇:里氏代换原则

    在本讲中,我来为大家介绍一下软件设计原则里面的第二个原则,即里氏代换原则. 概述 首先,大家应该知道,里氏代换原则是面向对象设计的基本原则之一.那什么是里氏代换原则呢?里氏代换原则是指任何基类可以出现 ...

  7. 从零开始学习Java设计模式 | 软件设计原则篇:依赖倒转原则

    在本讲,我将为大家介绍软件设计原则里面的第三个原则,即依赖倒转原则. 概述 什么是依赖倒转原则呢?我们来看一下下面这段描述: 高层模块不应该依赖低层模块,两者都应该依赖其抽象:抽象不应该依赖细节,细节 ...

  8. 从零开始学习Java设计模式 | 软件设计原则篇:接口隔离原则

    在本讲,我将为大家介绍软件设计原则里面的第四个原则,即接口隔离原则. 概述 接口隔离原则是指客户端不应该被迫依赖于它不使用的方法,一个类对另一个类的依赖应该建立在最小的接口上面. 这句话可能不是很好理 ...

  9. C++设计模式 | 四种创建型模式——简单工厂模式、工厂方法模式、抽象工厂模式、单例模式...

    简单工厂模式 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> using namespa ...

最新文章

  1. linux 命令 sys_call_table地址,Linux x86_64 内核查找sys_call_table注意事项
  2. Linux ab 命令
  3. Nginx的应用之安装配置
  4. idea提示“ cannot access xxxxxxxx.class“的解决方法,idea的bug
  5. 内存问题排查手段及相关文件介绍
  6. 初中数学抽象教学的案例_初中数学教学反思案例
  7. popupTheme和theme
  8. yum与apt-get的区别以及两者更新源(阿里/网易【163】)
  9. Java 通过指定的ttf字体库,提取特定文字
  10. VirtualBox安装win10虚拟机
  11. Hook Android q 剪贴板限制,AndroidQ(10)获取剪切板内容适配
  12. VariantNet--简易的神经网络做DNA测序
  13. Gallery模块管理系统相册,支持从相册中选择图片或视频文件、保存图片或视频文件到相册等功能。通过plus.gallery获取相册管理对象
  14. pytorch:自定义损失函数total variation loss
  15. 1586 - Molar mass
  16. idea java文件重命名_IDEA项目重命名的操作
  17. 码元、符号、波特率、比特率等概念的了解
  18. ArrayList集合的使用
  19. python列表的使用_python列表的使用
  20. java 指针定义_Java中关于指针的个人理解

热门文章

  1. 常用制作——RJ45 网线
  2. 和式链HSC创始团队在上海与FireBlue资本和多个LP进行投资签约
  3. Windows网络编程笔记
  4. 【强化学习】⚠️手把手带你走进强化学习 2⚠️ OPP 算法实现月球登陆器 (PyTorch 版)
  5. Python-Django毕业设计医院住院部管理系统(程序+Lw)
  6. 想男朋友出一部分钱买个iPad过分吗?
  7. python 数据归一化/标准化方法与代码(离差标准化,log归一化,标准化,比例归一化,反正切归一化)
  8. 动手学深度学习——深度学习介绍及软件安装
  9. 爬虫进阶路程4——绕过ip反爬
  10. 如何训练大脑,保持专注的三种技巧