设计模式C++描述----07.建造者(Builder)模式
一. 概述
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)模式相关推荐
- 设计模式学习笔记——建造者(Builder)模式
设计模式学习笔记--建造者(Builder)模式 @(设计模式)[设计模式, 建造者模式, builder] 设计模式学习笔记建造者Builder模式 基本介绍 建造者案例 类图 实现代码 Build ...
- 设计模式C#描述之——简单工厂模式、抽象工厂模式、单例与多例模式
设计模式C#描述之--简单工厂模式 前 言:设计模式是软件开发领域的精髓之一.学好设计模式是目前每一个开发人员的必修课.目前关于设计模式的书很多,其中比较好的有GOF那本的中译本,但并 不很适合初学者 ...
- 设计模式--建造者(Builder)模式
模式定义 将一个复杂对象的创建与他的表示分离,使得同样的构建过程可以创建不同的表示 类图 应用场景 1.需要生成的对象具有复杂的内部结构: 2.需要生成的对象内部属性本身相互依赖: 3.与不可变对象配 ...
- 利用建造者(Builder)模式构建 Java 对象
简介: 一般我们构建对象有两种方法,一是构造器,二是默认无参构造器创建对象后使用 set 方法一个个赋值.第一种方法我们需要写一个全参的构造方法,但这样我们在构造对象时有一些不需要填写的对象也要给他赋 ...
- Java设计模式之建造者Builder模式代码示例
- Android 常用设计模式——观察者模式,单例模式,Builder模式,原型模式,命令模式
设计模式(Design pattern)是一套被反复使用的代码设计经验的总结.使用设计模式的目的是为了可重用代码让代码更容易被他人理解 设计模式的运用,有助于代码的维护与拓展.任何模式的出现,都是为了 ...
- 设计模式——生成器(建造者)模式
1. 简介 建造者(Builder)模式又称 生成器模式,属于创建型模式.在软件的设计中,我们可能经常会遇到需要构建某个复杂的对象(比如在游戏开发中,进行人物角色的构建),建造该对象的"过程 ...
- Builder模式演义
引言 不用怀疑,你一定遇到和使用过它,它在Android源码和各种开源组件中是如此常见.这是一种你可以不知道怎么运用,但是知道了会欲罢不能的设计模式. 定义 Builder模式(建造者模式,有人称作生 ...
- 设计模式(4)建造者模式/生成器模式(Builder)
设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 设计模式(3)抽象工厂模式(Abstract Factory) 源 ...
最新文章
- 微信小程序开发实战(三)自定义UI样式---增加减少按钮
- ie6下padding bug
- xdebug影响php运行速度
- 深入到系统组件是否白盒测试_白盒测试
- python的open方法_Python os.open() 方法
- @TableLogic注解表示逻辑删除
- RED HAT 7 性能监控工具
- 统计图的连通块的个数的两种方法
- ie下使用frameset布局导致跨域cookie丢失问题解决
- SpringBoot 1.快速搭建一个 SpringBoot Maven工程
- 数据结构学习笔记(二) 线性表的顺序存储和链式存储
- 第三部分数据结构[专业课考试3]
- Linux C聊天室的实现
- 基于RGMII的FPGA千兆以太网设计
- Windows下如何打开CSV文件
- 相机标定:像素焦距和毫米焦距的转换,根据内参计算FOV
- 2014年6月份第4周51Aspx源码发布详情
- ale插件 vim_vim ale插件详情
- 问君硅谷几多渣?先把Snapchat总裁扒一扒
- [转].native的作用