生成器模式

亦称: 建造者模式、Builder

意图

生成器模式是一种创建型设计模式, 使你能够分步骤创建复杂对象。 该模式允许你使用相同的创建代码生成不同类型和形式的对象。

一图说明:

还是老话,请在阅读本篇文章后,记住此图。

图解:

抽象工厂模式解决的实际问题:

假设有这样一个复杂对象, 在对其进行构造时需要对诸多成员变量和嵌套对象进行繁复的初始化工作。 这些初始化代码通常深藏于一个包含众多参数且让人基本看不懂的构造函数中; 甚至还有更糟糕的情况, 那就是这些代码散落在客户端代码的多个位置。

例如, 我们来思考如何创建一个 房屋House对象。 建造一栋简单的房屋, 首先你需要建造四面墙和地板, 安装房门和一套窗户, 然后再建造一个屋顶。 但是如果你想要一栋更宽敞更明亮的房屋, 还要有院子和其他设施 (例如暖气、 排水和供电设备), 那又该怎么办呢?

最简单的方法是扩展 房屋基类, 然后创建一系列涵盖所有参数组合的子类。 但最终你将面对相当数量的子类。 任何新增的参数 (例如门廊类型) 都会让这个层次结构更加复杂。

另一种方法则无需生成子类。 你可以在 房屋基类中创建一个包括所有可能参数的超级构造函数, 并用它来控制房屋对象。 这种方法确实可以避免生成子类, 但它却会造成另外一个问题。

通常情况下, 绝大部分的参数都没有使用, 这使得对于构造函数的调用十分不简洁。 例如, 只有很少的房子有游泳池, 因此与游泳池相关的参数十之八九是毫无用处的。

抽象工厂模式的解决方案

生成器模式建议将对象构造代码从产品类中抽取出来, 并将其放在一个名为生成器的独立对象中。


该模式会将对象构造过程划分为一组步骤, 比如 build­Walls创建墙壁和 build­Door创建房门创建房门等。 每次创建对象时, 你都需要通过生成器对象执行一系列步骤。 重点在于你无需调用所有步骤, 而只需调用创建特定对象配置所需的那些步骤即可。

当你需要创建不同形式的产品时, 其中的一些构造步骤可能需要不同的实现。 例如, 木屋的房门可能需要使用木头制造, 而城堡的房门则必须使用石头制造。

在这种情况下, 你可以创建多个不同的生成器, 用不同方式实现一组相同的创建步骤。 然后你就可以在创建过程中使用这些生成器 (例如按顺序调用多个构造步骤) 来生成不同类型的对象。

解构抽象工厂模式的几大组成

伪代码实现

区别

看图记设计模式【四】,创建模式系列:生成器模式相关推荐

  1. 看图记设计模式【二】,创建模式系列:工厂模式

    工厂模式 亦称: 虚拟构造函数.Virtual Constructor.Factory Method 意图 工厂方法模式是一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对 ...

  2. Java设计模式之创建型:建造者模式

    一.什么是建造者模式: 建造者模式将复杂产品的创建步骤分解在在不同的方法中,使得创建过程更加清晰,从而更精确控制复杂对象的产生过程:通过隔离复杂对象的构建与使用,也就是将产品的创建与产品本身分离开来, ...

  3. 设计模式(三):生成器模式

    这是设计模式系列文章的第三篇 之前两篇的阅读效果不是很好,我一度怀疑这种题材的文章不受大家欢迎,直到前两天我面试了一个小姐姐... 面试过程中和小姐姐聊起她在上家公司做过的项目,其中有一个功能,根据小 ...

  4. Java设计模式之创建型:原型模式

    一.什么是原型模式: 原型模式主要用于对象的创建,使用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象.UML类图如下: 原型模式的核心是就是原型类 Prototype,Prototype ...

  5. 设计模式-------建造者模式(生成器模式)

    建造者模式(生成器模式)定义:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 建造者模式中的4个角色: Product产品类 通常是实现了模板方法模式,也就是有模板方法和 ...

  6. Android Ap 开发 设计模式第七篇:生成器模式

    Builder Pattern 模式解读 生活在深圳这所高速发展的城市,高楼大厦林立.所谓万丈高楼平地起,在我们感慨楼层的高耸之外,更要配服楼层的建造者和设计者.大楼首先得打稳地基.搭建骨架,再由下往 ...

  7. 设计模式(Java随笔)—生成器模式

    生成器模式(Builder Pattern):分离构建算法和具体的构造实现,从而使构建算法可以重用 Separate the construction of a complex object from ...

  8. 看图记设计模式【一】,设计模式是什么?设计模式的组成。

    设计模式是什么? 设计模式是软件设计中常见问题的典型解决方案. 它们就像能根据需求进行调整的预制蓝图, 可用于解决代码中反复出现的设计问题. 设计模式与方法或库的使用方式不同, 你很难直接在自己的程序 ...

  9. 设计模式解密(6) - 建造者模式(生成器模式)

    1.简介 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 分解一下定义: 1.复杂对象的表示: 2.复杂对象的构建过程: 3.可分离的通用构建过程,也适用于其它复杂对 ...

最新文章

  1. Linux下逻辑地址-线性地址-物理地址图解
  2. 新书《活用UML-需求分析高手》 序
  3. Cisco 交换机配置端口镜像
  4. 机器学习中的损失函数
  5. Python快速简单生成矩形词云
  6. LoadRunner中常见参数和变量
  7. linux系统it固定资产管理系统包_固定资产管理系统单机版有哪些特点?
  8. Oracle创建数据库出错,oracle 10g dbca创建数据库出错 急急急
  9. Struts2之类型转换中的错误
  10. CreatorPrimer|优化编辑器
  11. EXCEL常用函数的操作及使用技巧(上篇)
  12. Android反射系统截图Api
  13. MCS:离散随机变量——Poisson分布
  14. DALAO们好我是新手
  15. 有什么免费的视频格式转换工具?快试试这4款,堪称“良心”工具
  16. 从用AI+VR虚拟教室穿越到中国说起,看红头文件下,互联网教育公司的AI招牌
  17. 蓝牙耳机什么牌子好?2020年度热销高人气五款蓝牙耳机测评
  18. MAC最详细配置rz/sz命令
  19. 留学计算机美国硕士,美国硕士留学计算机专业录取情况
  20. 通过按键精灵实现mc自动钓鱼

热门文章

  1. 物联网串口在线更新语音的mp3语音芯片ic方案说明
  2. 一些简单的大数据基础知识
  3. MATLAB应用软件与多核并行科学计算工作站
  4. EEE406 Power System Analysis(学习整理 Week 1)
  5. 米兰对皇马,一场完全符合好莱坞式励志电影所有要素的娱乐大片
  6. 陪玩app源码,陪玩系统开发约单下单逻辑处理规则
  7. 弗洛伊德经典语录(2018-4-24)
  8. 软件测试实验:接口测试
  9. 【重磅】2021年互联网大厂职级对应薪资一览表
  10. FusionChart 水印破解方法(代码版)