设计模式——建造者模式/生成器模式(C++实现)


#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++实现)的更多相关文章
- 设计模式(4)建造者模式/生成器模式(Builder)
设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 设计模式(3)抽象工厂模式(Abstract Factory) 源 ...
- Java设计模式之建造者模式(生成器模式)
建造者模式: 也叫生成器模式.用来隐藏复合对象的创建过程,他把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象. 总结一句就是封装一个对象的构造过程,并允许按步骤构造 ...
- 设计模式 — 建造者(生成器)模式(Builder)
考虑这样一种业务场景,我们构建一个业务对象,但是这个业务对象及其复杂.为了代码的根号的可读性,我们会把这个对象的构建过程根据精密联系的程度来拆分成几个类来完成.最后再放到一起使用来生成复杂对象.这个业 ...
- 设计模式 | 建造者模式/生成器模式(builder)
定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 结构:(书中图,侵删) 一个产品类 一个指定产品各个部件的抽象创建接口 若干个实现了各个部件的具体实现的创建类 一个 ...
- 1.6建造者模式(生成器模式) Builder
1.概念:将一个复杂对象的构建和他的表示分离,使得同样的构件可以创建不同的表示. 2.实例:肯德基和中餐,肯德基抽象了整个做菜的复杂过程(相同的构建),然后在不同的店铺进行实现(不同的表示).中餐往往 ...
- Java 设计模式系列(四)生成器模式
Java 设计模式系列(四)生成器模式 生成器模式也称之为建造者模式.将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.demo 1. 生成器模式原理 1.1 生成器模式结构 ...
- 设计模式十: 生成器模式(Builder Pattern)
简介 生成器模式属于创建型模式的一种, 又叫建造者模式. 生成器模式涉及4个关键角色:产品(Product),抽象生成器(builder),具体生成器(ConcreteBuilder),指挥者(Dir ...
- C#设计模式——生成器模式(Builder Pattern)
一.概述在软件系统中,有时候面临着复杂的对象创建,该对象由一定算法构成的子对象组成,由于需求变化,这些子对象会经常变换,但组合在一起的算法却是稳定的.生成器模式可以处理这类对象的构建,它提供了一种封装 ...
- 设计模式(二): BUILDER生成器模式 -- 创建型模式
1.定义 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式. 2.适用场景 1. 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式 ...
随机推荐
- 老男孩Python全栈开发(92天全)视频教程 自学笔记18
day18课程内容: os模块 import osprint(os.getcwd())#D:\untitled\练习题 获取当前工作目录os.chdir(r'D:\untitled\练习题\16.1切 ...
- PAT1119. Pre- and Post-order Traversals
思路:中序遍历–根结点,左子树,右子树:后序遍历–左子树,右子树,根结点. 那么在找到根结点之后就可以开始划分左右子树了.左子树的先序第一个节点是根,左子树的后序最后一个节点是根. 例如 1 2 3 ...
- C语言结构体定义的几种方法
什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据 ...
- Http协议规范及格式
HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616.HTTP协议采用了请求/响应模型.客户 ...
- 云计算基础 (redhat7介绍及相关配置)
redhat7简介 新版本的rhel7不再对32位架构的支持 引导程序: GRUB2,比之前的GRUB更强大,GRUB2支持bios,efi和openfiremware GRUB2支持mbr分区表和g ...
- 关于用wubi安装Ubuntu,总是提示“没有定义根文件系统”的问题
用diskgenius测试一下分区问题,就发现一些错误,所以怀疑可能就是因为这个分区参数错误导致WUBI安装不成功,费了大力气转移数据后,重新对硬盘分区,这里称赞一下diskgenius,的确不错,当 ...
- Java中字符串的一些常见方法
1.Java中字符串的一些常见方法 /** * */ package com.you.model; /** * @author Administrator * @date 2014-02-24 */ ...
- C# 利用Newtonsoft.Json进行Json序列化与反序列化
我们可以通过DataContractJsonSerializer类来序列化一个对象为json字符串. public class JsonConvert<T> { public static ...
- 芝麻HTTP:TXT文本存储
将数据保存到TXT文本的操作非常简单,而且TXT文本几乎兼容任何平台,但是这有个缺点,那就是不利于检索.所以如果对检索和数据结构要求不高,追求方便第一的话,可以采用TXT文本存储.本节中,我们就来看下 ...
- class-k近邻算法kNN
1 k近邻算法2 模型2.1 距离测量2.2 k值选择2.3 分类决策规则3 kNN的实现--kd树3.1 构造kd树3.2 kd树搜索 1 k近邻算法 k nearest neighbor,k-NN ...