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. Lua基本函数库 【转】

    转自:http://www.cnblogs.com/whiteyun/archive/2009/08/12/1543184.html 基本函数库为Lua内置的函数库,不需要额外装载 assert (v ...

  2. LinkedList add remove get 代码分析

    add void linkLast(E e) { //e 要添加的元素 final Node<E> l = last; // 最后一个元素 final Node<E> newN ...

  3. 不同手机根据坐标计算控件、图片的像素,px 与 dp, sp换算公式?

    参考该帖子:http://www.cnblogs.com/bluestorm/p/3640786.html PPI = Pixels per inch,每英寸上的像素数,即 "像素密度&qu ...

  4. laravel学习之路5缓存

    redis需要先安装 需要通过 Composer 安装 predis/predis 扩展包 (~1.0) 或者使用 PECL 安装 PhpRedis PHP 拓展. composer require ...

  5. Unity5 怎样做资源管理和增量更新

    工具 Unity 中的资源来源有三个途径:一个是Unity自己主动打包资源.一个是Resources.一个是AssetBundle. Unity自己主动打包资源是指在Unity场景中直接使用到的资源会 ...

  6. POJ2396 Budget 【带下界的最大流】

    Budget Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5962   Accepted: 2266   Special ...

  7. 零基础学python-2.7 列表与元组

    事实上,能够把列表和元组看成普通的数组.可是这个数组能够存储不同的数据类型(对象) 列表和元组的差别   列表 元组 使用的符号 [] () 元素数量 可变 不可变 改动元素 不能够 能够 假设大家有 ...

  8. CentOS 6.4 yum安装LAMP环境

    一.制作连外网的yum源文件 1.  centOS安装完成时是默认存在的,不需要做任何操作,可以直接使用yum 命令进行操作, 默认是在 /etc/yum.repos.d/目录下的 2. 如果你因为制 ...

  9. ios 手势返回<1>

    极其简单取巧的方法 iOS7之后是有侧滑返回手势功能的.注意,也就是说系统已经定义了一种手势,并且给这个手势已经添加了一个触发方法(重点).但是,系统的这个手势的触发条件是必须从屏幕左边缘开始滑动.我 ...

  10. 区分Web前端和后端(转载)

    转载自:http://blog.csdn.net/rosetta/article/details/53871766 前言   做C开发将近六年,基本上没有接触过web相关的东西,原来听别人说web相关 ...