建造者模式把一个复杂的对象的与他的表示分离,使得同样的构造过程可以构建不同的表示(大话设

计模式)。它把对象的各个组件的组装隐藏起来,对外提供一个组装方法,并对外提供一个对象表现

的抽象接口,调用者通过实现此表现抽象接口来实现多种对象的表现,然后调用组装方法来组装出目

标表对象。

代码如下:

//零部件的基类,外部调用者通过实现此接口来表现各个零部件

class PersonBuilder           
{
public:
    PersonBuilder(){};
    virtual ~PersonBuilder(){};
    virtual void BuildHead()=0;
    virtual void BuildBody()=0;
    virtual void BuildArmLeft()=0;
    virtual void BuildArmRight()=0;
    virtual void BuildLegLeft()=0;
    virtual void BuildLegRight()=0;
};

//组件组装类,外部通过调用此类的组装方法

CreatePerson来组装出对象。

class PersonDirector
{
private:
    PersonBuilder* _pPersonBuilder;
public:
    PersonDirector():_pPersonBuilder(0){};
    PersonDirector(PersonBuilder* pPersonBuilder):_pPersonBuilder(pPersonBuilder){};
    ~PersonDirector();
    void CreatePerson();
};

PersonDirector::~PersonDirector()
{
    if(_pPersonBuilder!=0)
        delete _pPersonBuilder;
}

void PersonDirector::CreatePerson()
{
    _pPersonBuilder->BuildHead();
    _pPersonBuilder->BuildBody();
    _pPersonBuilder->BuildArmLeft();
    _pPersonBuilder->BuildArmRight();
    _pPersonBuilder->BuildLegLeft();
    _pPersonBuilder->BuildLegRight();
}

//调用者实现的一个组件的表现

class PersonFatBuilder : public PersonBuilder
{
public:
    PersonFatBuilder(){};
    ~PersonFatBuilder(){};
    void BuildHead();
    void BuildBody();
    void BuildArmLeft();
    void BuildArmRight();
    void BuildLegLeft();
    void BuildLegRight();
};

void PersonFatBuilder::BuildHead()
{
    std::cout<&lt;"胖头"&lt;&lt;std::endl;
}
void PersonFatBuilder::BuildBody()
{
    std::cout&lt;&lt;"胖身子"&lt;&lt;std::endl;
}
void PersonFatBuilder::BuildArmLeft()
{
    std::cout&lt;&lt;"胖左手"&lt;&lt;std::endl;
}
void PersonFatBuilder::BuildArmRight()
{
    std::cout&lt;&lt;"胖右手"&lt;&lt;std::endl;
}
void PersonFatBuilder::BuildLegLeft()
{
    std::cout&lt;&lt;"胖左腿"&lt;&lt;std::endl;
}
void PersonFatBuilder::BuildLegRight()
{
    std::cout&lt;&lt;"胖右腿"&lt;&lt;std::endl;
}

//调用者的调用代码。

int main()
{
    PersonDirector* pPersonDirector=new   PersonDirector(new PersonFatBuilder);
    pPersonDirector->CreatePerson();
    return 0;
}

转载于:https://blog.51cto.com/chenchao40322/401176

设计模式之建造者(builder)模式相关推荐

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

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

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

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

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

  4. 设计模式C++描述----07.建造者(Builder)模式

    一. 概述 Builder 模式要解决的问题是:当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成),我们要要复杂对象的创建过程和这个对象的表示(展示)分离开来,这样做的好处就是通过一步步 ...

  5. java中的build类_30 Java设计模式系列-建造者(Build)模式

    建造者(Build)模式 建造者(Build)模式是非常常见的设计模式之一,写个笔记,记录一下我的学习过程和心得. 首先了解一些Build模式的定义. 将一个复杂对象的构建与它的表示分离,使得同样的构 ...

  6. [Andriod设计模式之旅]——Builder模式

    版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/u013132758. https://blog.csdn.net/u013132758/article/deta ...

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

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

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

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

  9. Android常考问题(8)-设计模式:Builder模式(顺带学习了一下String的比较和final)

    今天的主要目的是学习设计模式中的Builder模式.由于java基础不牢固,在学习过程中要回过头去学习java内容,因此凑成了这样一篇驳杂的文章. Builder模式 首先是Builder设计模式的作 ...

  10. 设计模式之建造者模式(生成器模式、Builder)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

最新文章

  1. Java学习总结:58(Collections工具类)
  2. mysql数据对比同步_跨数据库mysql语句同步数据和对比运算
  3. nginx同时支持asp.net与php
  4. 2018 ICPC Asia Jakarta Regional Contest J. Future Generation 状压dp
  5. json符号解释大全_牛年汪姓男孩高端大气的名字大全
  6. C++/C--删除string末尾字符的方法【转载】
  7. socket编程(八)
  8. 在C#中什么时候用分号?
  9. 工控行业各品牌程序扩展格式和软件
  10. 网页中常用加载页面的实现原理
  11. 汽车故障诊断方法及注意事项
  12. 解决微信端无法使用window.open打开文件的问题
  13. 算法实践:数独的基本解法
  14. 推荐系统相关顶会整理
  15. python无限制邮件群发软件_收藏 - 使用Python通过SMTP协议群发/单发邮件方法
  16. 点云3D目标检测之——尝试SFD代码跑通(超详细!!)
  17. 漫步最优化五——可行域
  18. ArcGIS教程:多面体
  19. 《如梦令·常记溪亭日暮》【宋】李清照
  20. 充电宝不能托运只能随身带

热门文章

  1. EA(Enterprise Architecture,企业架构)
  2. hibernate使用sql进行查询
  3. 读EntityFramework.DynamicFilters源码_心得_示例演示02
  4. 让一个视图对触摸事件作出响应, 需要实现的方法
  5. ffmpeg怎么样处理网络流
  6. linux 中select()函数的使用
  7. BerkeleyDB
  8. ASP.NET Trick文章系列--使用State Server管理Session状态的另类经济用法
  9. 130 MySQL字段完整性约束(重要)
  10. effective c++:对象的赋值运算