建造者模式:

将一个复杂对象的建造过程和它的表示分离开来,这样同样的建造过程能够创建不同的表示。

Separate the construction of a complex object from its representation so that the same construction process can create different representations.

通俗一点就是假设流程是一样的,能够将这些流程抽象成一个类的一些接口。详细的创建过程能够在这个抽象类的子类中来实现。

C++中这个特性主要就是使用纯虚函数来实现。

UML图:

主要包含:

  1. Builder:指定了一个创建Product的一系列的接口。

  2. ConcreteBuilder:通过实现Builder中的接口详细实现了创建的步骤
  3. Director:定义了一个Buidler对象的引用来使用Builder的接口
  4. Product:表示须要创建的对象,ConcreteBuilder创建这个对象的每一部分。

详细的C++代码例如以下:

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <list>
#include <string> using namespace std; class Product
{
public:
void addPart(string str)
{
parts.push_back(str);
}
list<string>& getParts()
{
return parts;
}
private:
list<string> parts; }; class Builder
{
public:
Builder()
{
product=new Product();
}
virtual void buildPart1()=0;
virtual void buildPart2()=0;
void getResult()
{
list<string>::iterator iter=product->getParts().begin();
for(;iter!=product->getParts().end();iter++)
{
std::cout<<*iter<<std::endl;
}
}
virtual ~Builder()
{
if(!product)
delete product;
}
protected:
Product *product;
}; class ConcreteBuilder1:public Builder
{
public:
void buildPart1()
{
product->addPart("part one");
}
void buildPart2()
{
product->addPart("part two");
} }; class ConcreteBuilder2:public Builder
{
public:
void buildPart1()
{
product->addPart("part X");
}
void buildPart2()
{
product->addPart("part Y");
} }; class Director
{
public:
Director()
{ }
Director(Builder * b):build(b)
{
}
void construct()
{
build->buildPart1();
build->buildPart2();
build->getResult();
} private:
Builder *build; }; int main()
{
std::cout<<"建造者模式測试"<<std::endl;
ConcreteBuilder1* cb1=new ConcreteBuilder1();
Director d1(cb1);
d1.construct(); ConcreteBuilder2 * cb2=new ConcreteBuilder2();
Director d2(cb2);
d2.construct();
return 0;
}

运行结果例如以下:

设计模式之九:建造者模式(Builder)的更多相关文章

  1. 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数

    本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...

  2. iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数

    转自:http://www.cnblogs.com/wengzilin/p/4365855.html 本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解 ...

  3. 设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  4. IOS设计模式浅析之建造者模式(Builder)

    定义 "将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表现". 最初的定义出现于<设计模式>(Addison-Wesley,1994). 看这个概 ...

  5. Net设计模式实例之建造者模式(Builder Pattern)

    一.建造者模式简介(Brief Introduction) 建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示. 建造者模式的优点是 ...

  6. 设计模式 笔记 生成器(建造者)模式 Builder

    //---------------------------15/04/08---------------------------- //builder 生成器(建造者)模式---对象创建型模式 /* ...

  7. Java学习笔记——设计模式之九.建造者模式

     建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Product类: package cn.happy.design_pattern._09b ...

  8. 设计模式学习之建造者模式(Builder,创建型模式)(6)

    假如我们需要建造一个房子,并且我们也不知道如何去建造房子,所以就去找别人帮我们造房子 第一步: 新建一个房子类House,里面有房子该有的属性,我们去找房子建造者接口HouseBuilder,我们要建 ...

  9. 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)

    原文:乐在其中设计模式(C#) - 建造者模式(Builder Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 建造者模式(Builder Pattern) 作者:webabc ...

  10. 【设计模式】建造者模式 Builder Pattern

    前面学习了简单工厂模式,工厂方法模式以及抽象工厂模式,这些都是创建类的对象所使用的一些常用的方法和套路, 那么如果我们创建一个很复杂的对象可上面的三种方法都不太适合,那么“专业的事交给专业人去做”,2 ...

随机推荐

  1. swift语言点评八-枚举

    总结:swift中的枚举可以看作变量可以作为case匹配参数的类 Enumerations 枚举的作用:状态列举与匹配 枚举值与类型 If a value (known as a “raw” valu ...

  2. ActiveMQ学习笔记(3)----JMS的可靠性机制

    1. 消息接收确认 JMS消息只有在被确认之后,才认为已经被成功的消费了,消息成功消费通常包含三个阶段:客户接收消息,客户处理消息和消息被确认. 在事务性会话中,当一个事务被提交的时候,确认自动发生. ...

  3. 路飞学城-Python开发-第三章

    # 数据结构: # goods = [ # {"name": "电脑", "price": 1999}, # {"name&quo ...

  4. 获取鼠标经过处的标签的标签名和id

    <script> var el = window.document.body; // 声明一个变量,默认值为body window.document.body.onmouseover = ...

  5. 关于__str__的介绍

    在python语言里,__str__一般是格式是这样的. class A: def __str__(self): return "this is in str" 事实上,__str ...

  6. 做一个可复用的 echarts-vue 组件(延迟动画加载)

    在 vue 项目使用 echarts 的场景中,以下三点不容忽视:1. 可视化的数据往往是异步加载的:2. 若一个页面存在大量的图表( 尤其当存在关系图和地图时 ),往往会导致该页面的渲染速度很慢并可 ...

  7. 紫书 例题8-10 UVa 714 (二分答案)

    这道题让最大值最小, 显然是二分答案 当题目求的是最大值最小, 最小值最大, 这个时候就要想到二分答案 为什么可以二分答案呢, 因为这个时候解是单调性的, 如果简单粗暴一点 就全部枚举一遍, 验证答案 ...

  8. 紫书 例题8-17 UVa 1609 (构造法)(详细注释)

    这道题用构造法, 就是自己依据题目想出一种可以得到解的方法, 没有什么规律可言, 只能根据题目本身来思考. 这道题的构造法比较复杂, 不知道刘汝佳是怎么想出来的, 我想的话肯定想不到. 具体思路紫书上 ...

  9. 如何将visual studio 2010编辑模式改为插入???

    按一下键盘上的 insert button 反之亦然

  10. cocos2d_x_01_环境搭建

    终于效果图: Cocos2d-x-3.3 Mac 安装 下载地址: 參考文档:  在线API列表:  Cocos2d-x-3.3 版本号 从配置安装到创建项目都是命令行 官网下载最新版本号Cocos2 ...