1. 建造者模式,将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示。

用户只需要指定需要建造的类型就可以得到他们,而具体建造的过程和细节就不需要知道了。

关键类Director,用它来控制建造过程,用它来隔离用户与建造过程的关联。

适用场合主要是用于创建一些复杂的对象, 这些对象内部的构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。

在创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式适用的模式。

建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。

实例骨架:

product.h product.cpp

#ifndef PRODUCT_H
#define PRODUCT_H #include <iostream>
#include <list>
#include <string>
using namespace std; class Product
{
public:
Product();
void addPart(string part);
void show(); private:
list<string> *parts;
}; #endif // PRODUCT_H
#include "product.h"

Product::Product()
{
parts = new list<string>;
} void Product::addPart(string part)
{
parts->push_back(part);
} void Product::show()
{
for(list<string>::iterator i=parts->begin(); i!=parts->end(); i++)
cout << "part: " << *i << endl;
}

builder.h builder.cpp

#ifndef BUILDER_H
#define BUILDER_H #include "product.h" class Builder
{
public:
Builder();
void virtual builderPartA()=0;
void virtual builderPartB()=0;
virtual Product* getResult()=0;
}; #endif // BUILDER_H
#include "builder.h"

Builder::Builder()
{
}

concretebuilder1.h concretebuilder1.cpp

#ifndef CONCRETEBUILDER1_H
#define CONCRETEBUILDER1_H #include "builder.h" class ConcreteBuilder1 : public Builder
{
public:
ConcreteBuilder1();
~ConcreteBuilder1();
void builderPartA();
void builderPartB();
Product* getResult(); private:
Product *product;
}; #endif // CONCRETEBUILDER1_H
#include "concretebuilder1.h"

ConcreteBuilder1::ConcreteBuilder1()
{
product = new Product();
} ConcreteBuilder1::~ConcreteBuilder1()
{
delete product;
} void ConcreteBuilder1::builderPartA()
{
product->addPart("ConcreteBuilder1 A");
} void ConcreteBuilder1::builderPartB()
{
product->addPart("ConcreteBuilder1 B");
} Product* ConcreteBuilder1::getResult()
{
return product;
}

concretebuilder2.h concretebuilder2.cpp

#ifndef CONCRETEBUILDER2_H
#define CONCRETEBUILDER2_H #include "builder.h" class ConcreteBuilder2 : public Builder
{
public:
ConcreteBuilder2();
~ConcreteBuilder2();
void builderPartA();
void builderPartB();
Product* getResult(); private:
Product *product;
}; #endif // CONCRETEBUILDER2_H
#include "concretebuilder2.h"

ConcreteBuilder2::ConcreteBuilder2()
{
product = new Product();
} ConcreteBuilder2::~ConcreteBuilder2()
{
delete product;
} void ConcreteBuilder2::builderPartA()
{
product->addPart("ConcreteBuilder2 A");
} void ConcreteBuilder2::builderPartB()
{
product->addPart("ConcreteBuilder2 B");
} Product* ConcreteBuilder2::getResult()
{
return product;
}

director.h director.cpp

#ifndef DIRECTOR_H
#define DIRECTOR_H #include "builder.h" class Director
{
public:
Director();
void construct(Builder *builder);
}; #endif // DIRECTOR_H
#include "director.h"

Director::Director()
{
} void Director::construct(Builder *builder)
{
builder->builderPartA();
builder->builderPartB();
}

main.cpp

#include <iostream>
#include "product.h"
#include "concretebuilder1.h"
#include "concretebuilder2.h"
#include "director.h" using namespace std; int main()
{
cout << "Builder test !" << endl; Product *product = new Product();
ConcreteBuilder1 build1;
Director director;
director.construct(&build1);
product = build1.getResult();
product->show(); ConcreteBuilder2 build2;
director.construct(&build2);
product = build2.getResult();
product->show(); delete product; return 0;
}

大话设计模式--建造者模式 Builder -- C++实现实例的更多相关文章

  1. 设计模式—建造者模式(Builder)

    title: 设计模式-建造者模式 建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节.建造者模式属于对 ...

  2. 设计模式:建造者模式(Builder)

    流水作业大家应该都清楚吧!在流水作业中,我们可以将一些复杂的东西给构建出来,例如汽车.我们都知道汽车内部构件比较复杂,由很多部件组成,例如车轮.车门.发动机.方向盘等等,对于我们用户来说我们并不需要知 ...

  3. 23种设计模式--建造者模式-Builder Pattern

    一.建造模式的介绍       建造者模式就是将零件组装成一个整体,用官方一点的话来讲就是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.生活中比如说组装电脑,汽车等等这些都是建 ...

  4. 设计模式--建造者模式Builder(创建型)

    一.首先看建造者模式的UML图: 二.再来看一个建造者模式的例子 class Builder { public: virtual void BuildHead() {} virtual void Bu ...

  5. 说说设计模式~建造者模式(Builder)

    返回目录 建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我 ...

  6. 大话设计模式--工厂模式 factory -- C++实现实例

    实现<大话设计模式>的C++版本... 1. 工厂模式 使用的范围是 同一个基类,下面很多子类. (1)这里很容易出现的一个问题n多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就 ...

  7. 设计模式 - 建造者模式 Builder Pattern

    简介 场景 在创建复杂对象时,用户无须关心该对象所包含的属性以及它们的组装方式,只需要指定复杂对象的类型和内容就可以构建它们. 模式定义 建造者模式:将一个复杂对象的构建与表示分离,使得同样的构建过程 ...

  8. [工作中的设计模式]建造者模式builder

    一.模式解析 建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心. 以上是对建造者模式的官方定义,简单说就是对于复杂对象 ...

  9. 大话设计模式--访问者模式 Visitor -- C++实现实例

    1. 访问者模式: 表示一个作用于某对象结构中的和元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 访问者模式把数据结构和作用于结构上的操作之间的耦合脱开,使得操作集合可以 ...

随机推荐

  1. 清华EMBA课程系列思考之三 -- 中国经济与金融

    清华EMBA的第三次课,大家都已经渐渐了解了课程系列的基本节奏,也逐步适应了思考的基本思路,本次课程涉及到的全部内容都非常专业.闲话少述,直入主题了. 李稻葵教授部分: -- 清华大学经济管理学院弗里 ...

  2. jsp 页面导出excel时字符串数字变成科学计数法的解决方法

    web导出excel数据格式化 原文地址:http://www.cnblogs.com/myaspnet/archive/2011/05/06/2038490.html   当我们把web页面上的数据 ...

  3. 学习IIS & MVC的运行原理

    我一直疑惑于以下问题,从客户端发出一个请求,请求到达服务器端是怎样跟iis衔接起来的,而iis又是怎样读取我发布的代码的,并返回服务器上的文件.这其中是怎样的一个处理过程. 1:当你从浏览器中输入一个 ...

  4. MIC中offload语法总结

    MIC中offload的用法如下: #pragma offload specifier [,specifier...]specifier可以填入的选项为:target 例:taget(mic:0)if ...

  5. 一次 read by other session 的处理过程

     一个哥们给我打电话.他说系统中一直出现等待事件 read by other session .而且该等待都是同一个sql引起的.比較紧急,请我帮忙远程看看. 远程过去之后,用脚本把 等待事件给抓 ...

  6. java Collection-Map 之 TreeMap

    TreeMap 内部定义了一个类  static final class Entry<K,V> implements Map.Entry<K,V>,(自平衡红黑二叉树)作为数据 ...

  7. Python 自动化之验证码识别

    之前公司的验证码比较简单,可以采取直接破解的方式进行登录 部分代码如下: # -*- coding: utf-8 -*- from selenium import webdriver from sel ...

  8. XML5632 : Only one root element is allowed. Line: 1, Column 1

    奇葩啊, 最后查出来是因为有一个svg文件名对不上...

  9. Linux环境下,使用PHP创建一个守护进程

    <?php $pid = pcntl_fork(); // fork if ($pid < 0) exit; else if ($pid) // parent exit; else { / ...

  10. RxJava2 源代码解析(一)

    转载请标明出处: http://blog.csdn.net/zxt0601/article/details/61614799 本文出自:[张旭童的博客](http://blog.csdn.net/zx ...