[设计模式] —— Builder 生成器模式
文章目录
- 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 生成器模式相关推荐
- 设计模式--Builder生成器模式
GOF<设计模式>中说道:将一个复杂对象的构建与其表示向分离,使得同样的构建过程可以创建不同的表示. 所谓"复杂对象",是指:此对象中还含有其它的子对象. ...
- 深入浅出设计模式 ------ Builder(生成器模式)
一. 定义 将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示. 二. 结构 三. 参与者 Builder : 为创建一个Product对象的各个部件指定抽象接口. Con ...
- 2018.3.31 设计模式之生成器模式详解及例子(对象创建型模式)
设计模式之生成器模式(对象创建型模式) 1.定义/概念 将一个复杂对象的创建和它的表示分离,使得同样的创建过程可以有不同的表示. 2.生成模式角色 Builder: 生成器接口,定义创建一个Produ ...
- Builder生成器模式
这次来学习另一个创建型设计模式:Builder生成器模式. GOF对Builder模式的定义 (1)意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. (2)适用性 1. ...
- C#设计模式 之 生成器模式
C#设计模式 之 生成器模式 一,意图 二,动机 三,结构 四,优缺点 五,应用场景 六,代码实现 别名:建造者模式.Builder 一,意图 将一个复杂的对象的构建与其表示相分离,使得同样的构建 ...
- C#设计模式系列 8 ----Builder 生成器模式之--发工资了,带老婆到 岗顶百脑汇配置电脑...
1.理论定义 生成器模式 又叫:建造者模式,它 可以 把一个 复杂的对象,分步骤创建. 2.应用举例 需求描述:话说发工资了,打算去岗顶百脑汇 给老婆配置一台电脑. OK,坐着BRT,就出发了. ...
- 研磨设计模式 之 生成器模式(Builder)2 ——跟着cc学设计系列
8.2 解决方案 8.2.1 生成器模式来解决 用来解决上述问题的一个合理的解决方案就是生成器模式.那么什么是生成器模式呢? (1)生成器模式定义 (2)应用生成器模式来解决的思路 仔细分析上面的 ...
- Builder(生成器模式) 创建型
生成器模式 一.概述 二.结构 三.适用场景 四.优缺点 五.实例 一.概述 生成器是一种创建型设计模式,使你能够分步骤创建复杂对象.该模式允许你使用相同的创建 代码生成不同类型和形式的对象. 二.结 ...
- JAVA23种设计模式之生成器模式
生成器模式 生成器模式是一种对象的创建模式,可以将一个复杂产品的内部表象和产品的生产过程分隔开来,(构建与表示分离).使得同样的构建过程可以创建不同的表示. 简单的来说,就是讲一个复杂的对象拆分成一个 ...
最新文章
- IT人保持健康的必备法宝
- mysql聚合函数不存在的数据_SELECT子句中不存在聚合函数时的GROUP BY行为
- java字符串根据空格截取并存进list,并在每个元素前后加上/
- TreeMap之floorKey
- 【LiveVideoStack线上分享】FFmpeg深度学习模块架构与代码实践
- 怎样不停请求接口实现实时刷新_快狗打车实时数仓和基于Hologres的数据服务建设...
- mysql关联查询 事务 索引 外键
- [UI] 精美UI界面欣赏[8]
- 用jk触发器构成二分频电路_模拟电路,电子电路,二极管,放大电路
- Moloch网络流量分析工具
- PDF文件怎么合并?分享一个简单的方法
- Android帧动画框架
- 《R语言数据挖掘》读书笔记:三、分类
- 用户体验报告——石墨文档
- KKS1(生产订单计算-计算差异)时 常见差异问题
- Eigenvalue and singular value
- Eclipse中文语言包安装和设置中文Doc
- IP 地址和子网掩码
- 法国计算机与电信工程师学院,如何选择法国工程师学院?
- 2021ICPC沈阳区域赛BEFIJM