文章目录

  • Builder 生成器模式
    • 动机
    • 定义
    • 示例代码
    • 结构图
    • 总结

Builder 生成器模式

动机

面临着”一个复杂对象“的创建工作,其通常由各个部分的子对象用一定的算法构成,由于需求变化,这个复杂对象的各个部分经常变化,但它们组合在一起的算法很稳定。

定义

将一个复杂对象与其表示分离,使得同样的构建过程(稳定)可以构建不同的表示(变化)。

示例代码

class House {
public:// ...House* init() {this->BuildPart1();for(int i = 0; i < 4; ++i) {this->BuildPart2();}if(this->BuildPart3()) {this->BuildPart4();}return this;}virtual ~House() {}protected:virtual void BuildPart1() = 0;virtual void BuildPart2() = 0;virtual bool BuildPart3() = 0;virtual void BuildPart4() = 0;
};class StoneHouse : public House {
protected:virtual void BuildPart1() {// ...}// 其他虚函数实现
};

上面的形式就基本符合 Builder 生成器的模式了,这里假设有一个 House 类,里面主要定义了一个房子的构建过程 init() 函数,然后具体房子的搭建步骤则是可以变化的,这里有点像前面的 Template Method 的形式。即对象各部分经常变化(建造使用的材料等),但是形成的算法是稳定的(搭建房子就是固定的这几步)。

我们可以进一步地将 House 基类拆分。

class House {// ...
};class StoneHouse : public House {// ...
};class HouseBuilder {
public:House* GetResult() {return pHouse;}virtual ~HouseBuilder() {}protected:House* pHouse; // 这里的 House 对象可以通过成员函数new一个出来,不一定要类参数传入virtual void BuildPart1() = 0;virtual void BuildPart2() = 0;virtual bool BuildPart3() = 0;virtual void BuildPart4() = 0;
};class StoneHouseBuilder : public HouseBuilder {// 虚函数实现
};class HouseDirector {HouseBuilder* pHouseBuilder;
public:HouseDirector(HouseBuilder* h) : pHouseBuilder(h) {}House init() {pHouseBuilder->BuildPart1();for(int i = 0; i < 4; ++i) {pHouseBuilder->BuildPart2();}if(pHouseBuilder->BuildPart3()) {pHouseBuilder->BuildPart4();}pHouseBuilder->GetResult();}
};

上面将稳定的部分拆成了 HouseDirector 类,然后变化的部分抽象成了 HouseBuilder 基类。 House 类中则保留了除了这些内容之外的一些类的内容。

结构图

总结

Builder 生成器模式常用于”分步骤构建一个复杂的对象“。在这其中”分步骤“是一个稳定的算法,而复杂对象的各个部分是经常变化的。

其他设计模式汇总:
[设计模式] —— 设计模式的介绍及分类

[设计模式] —— Builder 生成器模式相关推荐

  1. 设计模式--Builder生成器模式

    GOF<设计模式>中说道:将一个复杂对象的构建与其表示向分离,使得同样的构建过程可以创建不同的表示.    所谓"复杂对象",是指:此对象中还含有其它的子对象.    ...

  2. 深入浅出设计模式 ------ Builder(生成器模式)

    一. 定义  将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示. 二. 结构  三. 参与者 Builder : 为创建一个Product对象的各个部件指定抽象接口. Con ...

  3. 2018.3.31 设计模式之生成器模式详解及例子(对象创建型模式)

    设计模式之生成器模式(对象创建型模式) 1.定义/概念 将一个复杂对象的创建和它的表示分离,使得同样的创建过程可以有不同的表示. 2.生成模式角色 Builder: 生成器接口,定义创建一个Produ ...

  4. Builder生成器模式

    这次来学习另一个创建型设计模式:Builder生成器模式. GOF对Builder模式的定义 (1)意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. (2)适用性 1. ...

  5. C#设计模式 之 生成器模式

    C#设计模式 之 生成器模式 一,意图 二,动机 三,结构 四,优缺点 五,应用场景 六,代码实现 别名:建造者模式.Builder 一,意图   将一个复杂的对象的构建与其表示相分离,使得同样的构建 ...

  6. C#设计模式系列 8 ----Builder 生成器模式之--发工资了,带老婆到 岗顶百脑汇配置电脑...

    1.理论定义 生成器模式 又叫:建造者模式,它  可以 把一个 复杂的对象,分步骤创建. 2.应用举例 需求描述:话说发工资了,打算去岗顶百脑汇  给老婆配置一台电脑. OK,坐着BRT,就出发了. ...

  7. 研磨设计模式 之 生成器模式(Builder)2 ——跟着cc学设计系列

    8.2  解决方案 8.2.1  生成器模式来解决 用来解决上述问题的一个合理的解决方案就是生成器模式.那么什么是生成器模式呢? (1)生成器模式定义 (2)应用生成器模式来解决的思路 仔细分析上面的 ...

  8. Builder(生成器模式) 创建型

    生成器模式 一.概述 二.结构 三.适用场景 四.优缺点 五.实例 一.概述 生成器是一种创建型设计模式,使你能够分步骤创建复杂对象.该模式允许你使用相同的创建 代码生成不同类型和形式的对象. 二.结 ...

  9. JAVA23种设计模式之生成器模式

    生成器模式 生成器模式是一种对象的创建模式,可以将一个复杂产品的内部表象和产品的生产过程分隔开来,(构建与表示分离).使得同样的构建过程可以创建不同的表示. 简单的来说,就是讲一个复杂的对象拆分成一个 ...

最新文章

  1. IT人保持健康的必备法宝
  2. mysql聚合函数不存在的数据_SELECT子句中不存在聚合函数时的GROUP BY行为
  3. java字符串根据空格截取并存进list,并在每个元素前后加上/
  4. TreeMap之floorKey
  5. 【LiveVideoStack线上分享】FFmpeg深度学习模块架构与代码实践
  6. 怎样不停请求接口实现实时刷新_快狗打车实时数仓和基于Hologres的数据服务建设...
  7. mysql关联查询 事务 索引 外键
  8. [UI] 精美UI界面欣赏[8]
  9. 用jk触发器构成二分频电路_模拟电路,电子电路,二极管,放大电路
  10. Moloch网络流量分析工具
  11. PDF文件怎么合并?分享一个简单的方法
  12. Android帧动画框架
  13. 《R语言数据挖掘》读书笔记:三、分类
  14. 用户体验报告——石墨文档
  15. KKS1(生产订单计算-计算差异)时 常见差异问题
  16. Eigenvalue and singular value
  17. Eclipse中文语言包安装和设置中文Doc
  18. IP 地址和子网掩码
  19. 法国计算机与电信工程师学院,如何选择法国工程师学院?
  20. 2021ICPC沈阳区域赛BEFIJM

热门文章

  1. Iconjar for Mac(图标素材管理工具)
  2. halcon算法思路_halcon常用算法
  3. 程序员节日的那些趣事与囧事!
  4. 宇多田光-prisoner of love(日剧 Last Friends)
  5. AGL和GENIVI(COVESA)介绍
  6. 使用telnet命令模拟发送邮件
  7. 5分钟实现漂亮的CSS加载动画,纯CSS实现加载动画
  8. 小学语文美育的研究(未完)
  9. QT系统托盘应用程序
  10. 服务器 希捷1t硬盘,希捷推出全球首款SAS接口1TB硬盘-通信/网络-与非网