一. 概述

Builder 模式要解决的问题是:当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成),我们要要复杂对象的创建过程和这个对象的表示(展示)分离开来,这样做的好处就是通过一步步的进行复杂对象的构建,由于在每一步的构造过程中可以引入参数,使得经过相同的步骤创建最后得到的对象的展示不一样。

二. 举例

KFC 与 Mcdonalds 的汉堡生成过程大致都是一样的,假设分为4个步骤;

但是 KFC 与 Mcdonalds 的汉堡味道有所差别,主要是在每一步的细节上有所不同。

顾客要吃汉堡并不关心具体的生产步骤,其实汉堡店也不关心,因为数百年来,这些步骤者是相同的,差别只在细节上。比如盐放多少,辣椒放多少等等。

结构如下:

Builder:为最基本的生产步骤

KFCBuilder:为KFC的具体生产步骤

MCDBuilder:为Mcdonalds的具体生产步骤

Director:为指挥者,用它来控件建造过程

//
//建造者
class Builder
{
public:virtual ~Builder(){}virtual void BuildSetp1() = 0;virtual void BuildSetp2() = 0;virtual void BuildSetp3() = 0;virtual void BuildSetp4() = 0;
};//KFC 具体建造者
class KFCBuilder:public Builder
{
public:void BuildSetp1(){cout<<"KFC Step1:"<<endl;}void BuildSetp2(){cout<<"KFC Step2:"<<endl;}void BuildSetp3(){cout<<"KFC Step3:"<<endl;}void BuildSetp4(){cout<<"KFC Step4:"<<endl;}};//Mcdonalds 具体建造者
class MCDBuilder:public Builder
{
public:void BuildSetp1(){cout<<"Mcdonalds Step1:"<<endl;}void BuildSetp2(){cout<<"Mcdonalds Step2:"<<endl;}void BuildSetp3(){cout<<"Mcdonalds Step3:"<<endl;}void BuildSetp4(){cout<<"Mcdonalds Step4:"<<endl;}};//
//指挥者
class Director
{
private:  Builder *m_pBuilder;  public:  Director(Builder *builder){m_pBuilder = builder;}void Create(){m_pBuilder->BuildSetp1();  m_pBuilder->BuildSetp2();  m_pBuilder->BuildSetp3();  m_pBuilder->BuildSetp4();  }
};//
//测试代码
int main(int argc,char* argv[])
{KFCBuilder kfc; //想吃KFCDirector director(&kfc);  director.Create();  return 0;
}

三. 说明

1. 建造者模式,在建造顺序上通常是稳定的。

2. 指挥者(Director),来隔离用户与具体建造过程的关联。

3. 它的好处是,客户端不需要知道具体的建造者方法,也不用但心忘记某一步骤没写,这些步骤统一由Director来调用。

设计模式C++描述----07.建造者(Builder)模式相关推荐

  1. 设计模式学习笔记——建造者(Builder)模式

    设计模式学习笔记--建造者(Builder)模式 @(设计模式)[设计模式, 建造者模式, builder] 设计模式学习笔记建造者Builder模式 基本介绍 建造者案例 类图 实现代码 Build ...

  2. 设计模式C#描述之——简单工厂模式、抽象工厂模式、单例与多例模式

    设计模式C#描述之--简单工厂模式 前 言:设计模式是软件开发领域的精髓之一.学好设计模式是目前每一个开发人员的必修课.目前关于设计模式的书很多,其中比较好的有GOF那本的中译本,但并 不很适合初学者 ...

  3. 设计模式--建造者(Builder)模式

    模式定义 将一个复杂对象的创建与他的表示分离,使得同样的构建过程可以创建不同的表示 类图 应用场景 1.需要生成的对象具有复杂的内部结构: 2.需要生成的对象内部属性本身相互依赖: 3.与不可变对象配 ...

  4. 利用建造者(Builder)模式构建 Java 对象

    简介: 一般我们构建对象有两种方法,一是构造器,二是默认无参构造器创建对象后使用 set 方法一个个赋值.第一种方法我们需要写一个全参的构造方法,但这样我们在构造对象时有一些不需要填写的对象也要给他赋 ...

  5. Java设计模式之建造者Builder模式代码示例

  6. Android 常用设计模式——观察者模式,单例模式,Builder模式,原型模式,命令模式

    设计模式(Design pattern)是一套被反复使用的代码设计经验的总结.使用设计模式的目的是为了可重用代码让代码更容易被他人理解 设计模式的运用,有助于代码的维护与拓展.任何模式的出现,都是为了 ...

  7. 设计模式——生成器(建造者)模式

    1. 简介 建造者(Builder)模式又称 生成器模式,属于创建型模式.在软件的设计中,我们可能经常会遇到需要构建某个复杂的对象(比如在游戏开发中,进行人物角色的构建),建造该对象的"过程 ...

  8. Builder模式演义

    引言 不用怀疑,你一定遇到和使用过它,它在Android源码和各种开源组件中是如此常见.这是一种你可以不知道怎么运用,但是知道了会欲罢不能的设计模式. 定义 Builder模式(建造者模式,有人称作生 ...

  9. 设计模式(4)建造者模式/生成器模式(Builder)

    设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 设计模式(3)抽象工厂模式(Abstract Factory) 源 ...

最新文章

  1. 微信小程序开发实战(三)自定义UI样式---增加减少按钮
  2. ie6下padding bug
  3. xdebug影响php运行速度
  4. 深入到系统组件是否白盒测试_白盒测试
  5. python的open方法_Python os.open() 方法
  6. @TableLogic注解表示逻辑删除
  7. RED HAT 7 性能监控工具
  8. 统计图的连通块的个数的两种方法
  9. ie下使用frameset布局导致跨域cookie丢失问题解决
  10. SpringBoot 1.快速搭建一个 SpringBoot Maven工程
  11. 数据结构学习笔记(二) 线性表的顺序存储和链式存储
  12. 第三部分数据结构[专业课考试3]
  13. Linux C聊天室的实现
  14. 基于RGMII的FPGA千兆以太网设计
  15. Windows下如何打开CSV文件
  16. 相机标定:像素焦距和毫米焦距的转换,根据内参计算FOV
  17. 2014年6月份第4周51Aspx源码发布详情
  18. ale插件 vim_vim ale插件详情
  19. 问君硅谷几多渣?先把Snapchat总裁扒一扒
  20. [转].native的作用

热门文章

  1. 讲师加油站 | 001 | 成为培训界的C罗,这篇干货你必须get!
  2. Android11.0(R) framework 新增类 lint 编码检查问题
  3. 设计模式--工厂模式(六)
  4. python找到字符中空格所在的位置_python查找空格和中文
  5. 用 Python 在 Excel 中画出蒙娜丽莎
  6. 设计模式之组合模式详解(附应用举例实现)
  7. 2015062510 - 每一条河流都有它的去处
  8. matlab 实现中值滤波
  9. 聊点技术之外的东西,说说我最近做的植发手术
  10. WebKit之部分过程总结