C++设计模式-建造者模式
发布日期:2021-06-30 11:01:58
浏览次数:2
分类:技术文章
本文共 2885 字,大约阅读时间需要 9 分钟。
目录
基本概念
建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们装配方式时适用的模式。
下面给出一个UML实例:
代码与实例
程序运行截图如下:
源码如下:
Head.h
#includeusing namespace std;typedef string Graphics;typedef string Pen;class PersonBuilder{public: virtual void buildHead(){} virtual void buildBody(){} virtual void buildArmLeft(){} virtual void buildArmRight(){} virtual void buildLegLeft(){} virtual void buildLegRight(){} PersonBuilder(Graphics g, Pen p); virtual ~PersonBuilder();private: Graphics *g; Pen *p;};class PersonThinBuilder : public PersonBuilder{public: PersonThinBuilder(Graphics g, Pen p); void buildHead(); void buildBody(); void buildArmLeft(); void buildArmRight(); void buildLegLeft(); void buildLegRight();};class PersonFatBuilder : public PersonBuilder{public: PersonFatBuilder(Graphics g, Pen p); void buildHead(); void buildBody(); void buildArmLeft(); void buildArmRight(); void buildLegLeft(); void buildLegRight();};class PersonDirector{public: PersonDirector(PersonBuilder *pb); void createPersion();private: PersonBuilder *pb;};
Head.cpp
#include "Head.h"#includePersonThinBuilder::PersonThinBuilder(Graphics g, Pen p):PersonBuilder(g, p){}void PersonThinBuilder::buildHead(){ cout << "瘦子 画头" << endl;}void PersonThinBuilder::buildBody(){ cout << "瘦子 画身体" << endl;}void PersonThinBuilder::buildArmLeft(){ cout << "瘦子 画左手" << endl;}void PersonThinBuilder::buildArmRight(){ cout << "瘦子 画右手" << endl;}void PersonThinBuilder::buildLegLeft(){ cout << "瘦子 画左脚" << endl;}void PersonThinBuilder::buildLegRight(){ cout << "瘦子 画右脚" << endl;}PersonBuilder::PersonBuilder(Graphics g, Pen p){ this->g = new Graphics(g); this->p = new Pen(p);}PersonBuilder::~PersonBuilder(){ delete g; delete p;}PersonFatBuilder::PersonFatBuilder(Graphics g, Pen p):PersonBuilder(g, p){}void PersonFatBuilder::buildHead(){ cout << "胖子 画头" << endl;}void PersonFatBuilder::buildBody(){ cout << "胖子 画身体" << endl;}void PersonFatBuilder::buildArmLeft(){ cout << "胖子 画左手" << endl;}void PersonFatBuilder::buildArmRight(){ cout << "胖子 画右手" << endl;}void PersonFatBuilder::buildLegLeft(){ cout << "胖子 画左脚" << endl;}void PersonFatBuilder::buildLegRight(){ cout << "胖子 画右脚" << endl; }PersonDirector::PersonDirector(PersonBuilder *pb){ this->pb = pb;}void PersonDirector::createPersion(){ pb->buildBody(); pb->buildHead(); pb->buildArmLeft(); pb->buildArmRight(); pb->buildLegLeft(); pb->buildLegRight();}
main.cpp
#include "Head.h"#includeusing namespace std;int main(int *argc, int *argv){ PersonThinBuilder *pT = new PersonThinBuilder("画瘦子", "红笔"); PersonDirector *pD = new PersonDirector(pT); pD->createPersion(); delete pT; delete pD; cout << "------------ 华 丽 的 分 割 线 ------------" << endl; PersonFatBuilder *pF = new PersonFatBuilder("画胖子", "黑笔"); PersonDirector *pD2 = new PersonDirector(pF); pD2->createPersion(); delete pF; delete pD2; getchar(); return 0;}
转载地址:https://it1995.blog.csdn.net/article/details/93671393 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月13日 19时40分02秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【python学习笔记】字典的打印
2019-04-30
【python3学习笔记】有序字典OderedDict
2019-04-30
【python3学习笔记】os.path.relpath(path[, start])
2019-04-30
【python3学习笔记】os.chdir(path)用法
2019-04-30
【python3学习笔记】assert 关键字
2019-04-30
【python3学习笔记】函数参数前单星号(*)和双星号(**)的区别
2019-04-30
【python3学习笔记】斜杠和双斜杠运算符的区别
2019-04-30
【深度学习笔记】用torch.nn.Sequential()搭建神经网络模型
2019-04-30
【深度学习笔记】用torch.nn.ModuleList搭建神经网络
2019-04-30
【深度学习笔记】pytorch的点乘(dot product)
2019-04-30
【深度学习笔记】残差
2019-04-30
【python学习笔记】读取指定文件夹中的图片,结合边缘保留滤波EPF
2019-04-30
【工具和环境】Linux下安装pycharm
2019-04-30