读者可能已经注意到了,建造样式与抽象工厂样式非常相像,而两者又都是用来建构同时属于几个产品族的对象的样式。那么这两种样式有什么样的区别呢?抽象工厂样式的简略类别图如下所示。 
 
在抽象工厂样式中,每一次工厂对象被呼叫时都会传回一个完整的产品对象,而使用端有可能会决定把这些产品组装成一个更大的和复杂的产品,也有可能不会。工厂对象是没有状态的,不知道上一次构建的是哪一个产品,也没有未来的概念,不知道下一次构建的是哪一个产品,更不知道自己构建的产品在更高层的产品结构蓝图中是什么位置。

建造类别则不同,建造样式的重点在导演者角色。导演者对象是有状态的,它知道整体蓝图,知道上一次、这一次和下一次交给建造者角色去构建的零件是什么,以便能够将这些零件组装成为一个更大规模的产品。它一点一点地建造出一个复杂的产品,而这个产品的组装程序就发生在导演者角色内部。建造者样式的使用端拿到的是一个完整的最后产品。

换言之,虽然抽象工厂样式与建造样式都是设计样式,但是抽象工厂样式处在更加具体的尺度上,而建造样式则处于更加宏观的尺度上。一个系统可以由一个建造样式和一个抽象工厂样式组成,使用端通过呼叫这个导演角色,间接地呼叫另一个抽象工厂样式的工厂角色。工厂样式传回不同产品族的零件,而建造者样式则把它们组装起来。

比如仍以众神造人为例,女娲利用建造样式负责把灵魂、耳目、手臂等组合成一个完整的人,而黄帝、上骈、桑林各自利用工厂样式创造出灵魂、耳目、臂手等。女娲不必考虑灵魂、耳目、手臂是什么样子、怎么创造出来的,这就成为一个由建造样式和抽象工厂样式组合而成的系统。

本书认为建造样式这个名字不如改为导演样式更能反映出本样式的本质,也更容易与工厂样式区分。实际上,只要向简单工厂样式、工厂方法样式、抽象工厂样式(甚至原型样式)中加入一个通晓整体产品结构的导演者角色,就可以得到某种形式的建造样式---由导演者角色反复呼叫各个工厂对象进行零件建造,然后由导演者角色进行零件组装,形成最后产品。

转载于:https://www.cnblogs.com/eoiioe/p/3661930.html

建造样式与抽象工厂样式的区别相关推荐

  1. 简单工厂和抽象工厂有什么区别?

    简单工厂和抽象工厂有什么区别? 简单工厂模式 是由一个工厂对象创建产品实例,简单工厂模式的工厂类一般是使用静态方法,通过不同的参数的创建不同的对象实例 可以生产结构中的任意产品,不能增加新的产品 抽象 ...

  2. 工厂方法模式与抽象工厂模式的区别

    工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类. 一个抽象工厂类,可以派生出多个具体工厂类. 每个具体工厂类只能创建一个具体产品类的实例. 抽象工厂模式: 多个抽象产品类,每个抽象产品类可以 ...

  3. 021 设计模式之工厂方法模式,抽象工厂模式的区别

    简单工厂模式,工厂方法模式和抽象工厂模式的异同 简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类.我们掌握一种思想,就是在创建一个对象时,需要把容易发 ...

  4. 工厂模式和抽象工厂模式的区别

    2019独角兽企业重金招聘Python工程师标准>>> 工厂是一种抽象,将创建对象的过程抽象:而抽象工厂更进一层,把工厂本身都抽象了. 工厂方法:定义一个用于创建对象的接口,让子类决 ...

  5. 工厂方法与抽象工厂模式的区别

    工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类. 一个抽象工厂类,可以派生出多个具体工厂类. 每个具体工厂类只能创建一个具体产品类的实例.抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派 ...

  6. 设计模式学习笔记(三)简单工厂、工厂方法和抽象工厂之间的区别

    设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory).工厂方法(Factory Method ...

  7. 简单工厂模式、工厂方法模式与抽象工厂模式的区别(转)

    虽然看完了<大话设计模式>,但是工厂模式的三种类型之间的差异,理解还不是非常透彻,那么本文就围绕三者间的差异性来阐述各自的优缺点. 简单工厂模式 (Simple Factory) 首先定义 ...

  8. 普通工厂类和抽象工厂类的区别

    定义 普通工厂:工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法模式使一个类的实例化延迟到其子类. 抽象工厂:抽象工厂模式提供了一个创建一系 ...

  9. JAVA工厂模式优缺点_简单工厂模式、工厂模式和抽象工厂模式区别及优缺点

    各位小伙伴好,今天给大家主要介绍一下简单工厂模式.工厂模式和抽象工厂模式的区别及各自的优缺点. (本文实现语言为Python3) [前言] 众所周知今天所讲的内容是 设计模式的一类:对于设计模式这个概 ...

最新文章

  1. golang defer简介 goland 警告提示 possible resource leak,difer is called in a for loop 原因
  2. Android KeyCode列表
  3. Python进阶: Decorator 装饰器你太美
  4. 2021-04-09 linux的shell脚本简单教程
  5. 深度学习框架TensorFlow(3.变量)
  6. CSS3动画(典型模板)
  7. Java EE 7批处理和魔兽世界–第2部分
  8. 【Android】Android开发启动app弹出一张广告图片,Dialog可以查看大图,查看某个图片功能...
  9. 计算机网络,IP地址概念及IP地址详细分类介绍、及子网掩码详细介绍MAC地址介绍、网络位,主机位、网络地址、广播地址。
  10. 常见数据结构与算法整理总结
  11. python从文件中读取数据时出现错误_python-从文件中读取数据
  12. 奖励名单表格模板_“我用一套表格,解决了孩子的拖延症,一路用到小学高年级!”...
  13. csv数据源的创建(一)
  14. vue示例todos
  15. linux包含两种设备文件,在Linux系统中/dev的目录详解
  16. 小飞鱼通达二开 通达OA集成企业微信扫码登录的开发(图文)
  17. 敏捷管理第四章《敏捷落地--团队试点》
  18. 商城店铺入驻系统_商家入驻开设店铺功能逻辑与流程设计
  19. 如何批量重命名文件?
  20. 思科模拟器实验5:交换机端口聚合配置实验

热门文章

  1. 实战操作主机角色转移(二)
  2. 求子数组的最大和要求O(n)
  3. 关于node.js杂记
  4. Android--音乐播放器
  5. 深入分析FreeDos -- 前言
  6. Yahoo,希望你和微软Bing能过的幸福
  7. qt设置顶层窗口_Python快速入门系列:PyQt5 快速开发GUI-窗口类型以及主窗口创建...
  8. 设计模式--代理模式--Java实现
  9. js模块化编程之彻底弄懂CommonJS和AMD/CMD
  10. jQuery 引用地址{包括jquery和google提供的地址}, 节省你不必要的流量