C++设计模式-建造者模式
发布日期:2021-06-30 11:01:58 浏览次数:2 分类:技术文章

本文共 2885 字,大约阅读时间需要 9 分钟。

目录

 

 


 

基本概念

建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们装配方式时适用的模式。

下面给出一个UML实例:

 

 

代码与实例

程序运行截图如下:

源码如下:

Head.h

#include 
using 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"#include 
PersonThinBuilder::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"#include 
using 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:C++设计模式-观察者模式
下一篇:Web前端笔记-使用bootstrap-table.js和bootstrap-table.css使得表格分页

发表评论

最新留言

初次前来,多多关照!
[***.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学习笔记】isinstance(object, classinfo) 函数用法 2019-04-30
【python3学习笔记】assert 关键字 2019-04-30
【python3学习笔记】函数参数前单星号(*)和双星号(**)的区别 2019-04-30
【python3学习笔记】斜杠和双斜杠运算符的区别 2019-04-30
【深度学习笔记】torch.nn.Sequential(* args) 与 torch.nn.Module 2019-04-30
【深度学习笔记】用torch.nn.Sequential()搭建神经网络模型 2019-04-30
【深度学习笔记】用torch.nn.ModuleList搭建神经网络 2019-04-30
【解决错误】AttributeError: module ‘scipy.misc‘ has no attribute ‘imread‘ 2019-04-30
【解决错误】复现RCAN的时候遇到了ImportError: cannot import name ‘_update_worker_pids’ from ‘torch._C’ 2019-04-30
【解决错误】ModuleNotFoundError: No module named ‘skimage‘ 2019-04-30
【深度学习笔记】pytorch的点乘(dot product) 2019-04-30
【深度学习笔记】残差 2019-04-30
【错误解决】cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\imgproc\sr 2019-04-30
【python学习笔记】读取指定文件夹中的图片,结合边缘保留滤波EPF 2019-04-30
【工具和环境】Linux下安装pycharm 2019-04-30
【Accumulation】The last two sentences of the abstract 2019-04-30