#include <iostream>
#include <string> using namespace std; class STProduct
{
public:
void setA(string str)
{
m_a = str;
} void setB(string str)
{
m_b = str;
} void setC(string str)
{
m_c = str;
} void Show()
{
cout<< "Product: "<< m_a<< "!\t"<< m_b<< "!\t"<< m_c<< endl;
} private:
string m_a;
string m_b;
string m_c;
}; class STBuilder
{
public:
STBuilder()
{
m_pstProduct = new STProduct();
}
virtual ~STBuilder()
{
delete m_pstProduct;
} virtual void BuildPartA() = ;
virtual void BuildPartB() = ;
virtual void BuildPartC() = ; virtual STProduct* GetResult()
{
return m_pstProduct;
} STProduct* m_pstProduct;
}; class STConcreteBuilder: public STBuilder
{
public:
virtual void BuildPartA()
{
m_pstProduct->setA("A Style");
} virtual void BuildPartB()
{
m_pstProduct->setB("B Style");
} virtual void BuildPartC()
{
m_pstProduct->setC("C Style");
}
}; class STDirector
{
public:
~STDirector()
{
delete m_pstBuilder;
} void SetBuilder(STBuilder* pstTmpBuilder)
{
m_pstBuilder = pstTmpBuilder;
} STProduct* Construct()
{
m_pstBuilder->BuildPartA();
m_pstBuilder->BuildPartB();
m_pstBuilder->BuildPartC(); return m_pstBuilder->GetResult();
} STBuilder* m_pstBuilder;
}; int main(int argc, char* argv[])
{
STBuilder* pstBuilder = new STConcreteBuilder(); STDirector* pstDirector = new STDirector();
pstDirector->SetBuilder(pstBuilder); STProduct* pstProduct = pstDirector->Construct();
cout<< "Show.................."<< endl;
pstProduct->Show(); return ;
}
//////////////////////////////////////
[root@ ~/learn_code/design_pattern/10_builder]$ ./builder
Show..................
Product: A Style! B Style! C Style

参考:http://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/builder.html

设计模式——建造者模式/生成器模式(C++实现)的更多相关文章

  1. 设计模式(4)建造者模式/生成器模式(Builder)

    设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 设计模式(3)抽象工厂模式(Abstract Factory) 源 ...

  2. Java设计模式之建造者模式(生成器模式)

    建造者模式: 也叫生成器模式.用来隐藏复合对象的创建过程,他把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象. 总结一句就是封装一个对象的构造过程,并允许按步骤构造 ...

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

    考虑这样一种业务场景,我们构建一个业务对象,但是这个业务对象及其复杂.为了代码的根号的可读性,我们会把这个对象的构建过程根据精密联系的程度来拆分成几个类来完成.最后再放到一起使用来生成复杂对象.这个业 ...

  4. 设计模式 | 建造者模式/生成器模式(builder)

    定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 结构:(书中图,侵删) 一个产品类 一个指定产品各个部件的抽象创建接口 若干个实现了各个部件的具体实现的创建类 一个 ...

  5. 1.6建造者模式(生成器模式) Builder

    1.概念:将一个复杂对象的构建和他的表示分离,使得同样的构件可以创建不同的表示. 2.实例:肯德基和中餐,肯德基抽象了整个做菜的复杂过程(相同的构建),然后在不同的店铺进行实现(不同的表示).中餐往往 ...

  6. Java 设计模式系列(四)生成器模式

    Java 设计模式系列(四)生成器模式 生成器模式也称之为建造者模式.将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.demo 1. 生成器模式原理 1.1 生成器模式结构 ...

  7. 设计模式十: 生成器模式(Builder Pattern)

    简介 生成器模式属于创建型模式的一种, 又叫建造者模式. 生成器模式涉及4个关键角色:产品(Product),抽象生成器(builder),具体生成器(ConcreteBuilder),指挥者(Dir ...

  8. C#设计模式——生成器模式(Builder Pattern)

    一.概述在软件系统中,有时候面临着复杂的对象创建,该对象由一定算法构成的子对象组成,由于需求变化,这些子对象会经常变换,但组合在一起的算法却是稳定的.生成器模式可以处理这类对象的构建,它提供了一种封装 ...

  9. 设计模式(二): BUILDER生成器模式 -- 创建型模式

    1.定义 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式. 2.适用场景 1. 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式 ...

随机推荐

  1. 情景linux--如何解决read命令产生的硬编码问题

    情景 我们知道,read命令可以读取文件内容,并把内容赋值给变量. 以如下的数据文件为例. $ cat data.txt 1 201623210021 wangzhiguo 25 2 20162321 ...

  2. elasticsearch-5.1.1使用snapshot接口备份索引

    如果ES是集群,那么需要使用共享存储,支持的存储有:a.shared file systemb.S3c.HDFS 我使用的是第一种,NFS共享文件系统.这里要说一下权限问题,ES一般是使用 elast ...

  3. 自动化测试 selenium中WebDriver 和WebElement的区别

    之前在做UI自动化测试中 经常会用到  WebDriver  和 WebElement两个类   以前对这两个类总感觉有点傻傻分不清 昨天看了下之前下的代码  结合自己的理解  对着两个类的区别和关系 ...

  4. javascript获取网页地址栏的id

    //获取网页的uid (function ($) { $.getUrlParam = function (name) { var reg = new RegExp("(^|&)&qu ...

  5. NLP︱高级词向量表达(一)——GloVe(理论、相关测评结果、R&python实现、相关应用)

    有很多改进版的word2vec,但是目前还是word2vec最流行,但是Glove也有很多在提及,笔者在自己实验的时候,发现Glove也还是有很多优点以及可以深入研究对比的地方的,所以对其进行了一定的 ...

  6. Bootloader Project

    Bootloader Project From OMAPpedia Jump to: navigation, search Contents [hide] 1 OMAP Bootloader Over ...

  7. Java Web项目报错总结

    Java Web项目报错总结 1.java.lang.IllegalStateException java.lang.IllegalStateException Caused by:java.lang ...

  8. Caused by: java.lang.ClassNotFoundException: org.aspectj.lang.annotation.Around

    1.错误描述 INFO:2015-05-01 11:12:15[localhost-startStop-1] - Root WebApplicationContext: initialization ...

  9. VxWorks6.6 pcPentium BSP 使用说明(一):基本概念

    "VxWorks6.6 BSP 使用说明"将发布pcPentium和idp945两个系列的BSP的使用说明.每个系列约5篇文章.之后还将发布由这两个官方提供的BSP的实战移植方法. ...

  10. select选中获取索引三种写法

    $('#someId').prop('selectedIndex'); $('option:selected', '#someId').index(); $('#someId option').ind ...