博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之- 建造者模式(Builder Pattern)
阅读量:4992 次
发布时间:2019-06-12

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

建造者模式

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。根据中文翻译的不同,建造者模式又可以称为生成器模式。
 
C++实现:
#include 
#include
// 产品[product]角色class Person { // 待建造的l人public : void SetHead(std::string head){ this->m_head = head; } std::string GetHead(){ return this->m_head; } void SetBody(std::string body) { this->m_body = body; } std::string GetBody() { return this->m_body; } void SetFoot(std::string foot) { this->m_foot = foot; } std::string GetFoot() { return this->m_foot; } void ShowPerson() { // 显示当前的人的信息 std::cout <<"This is a person has" <
m_head <<", BODY : " <
m_body <<", FOOT : " <
m_foot <
m_person = new Person( ); } virtual ~Builder() { // 析构函数 delete this->m_person; } Person* GetPerson() { // 获取建造者建造的人对象 return this->m_person; } virtual void BuildHead() = 0; // 建造人的头 virtual void BuildBody() = 0; // 建造人的躯体 virtual void BuildFoot() = 0; // 建造人的脚protected : Person *m_person;}; //实际建造者-=> 具体建造者[Concrete Builder]class FatBuilder : public Builder {public : FatBuilder():Builder(){} // 无参数的构造函数 virtual ~FatBuilder(){} // 析构函数 void BuildHead() { // 建造人的头 this->m_person->SetHead("Fat Head"); std::cout <<"Build Fat head..." <
m_person->SetBody("Fat Body"); std::cout <<"Build Fat body..." <
m_person->SetFoot("Fat Foot"); std::cout <<"Build Fat foot..." <
具体建造者[Concrete Builder]class ThinBuilder : public Builder {public : ThinBuilder():Builder(){} // 无参数的构造函数 virtual ~ThinBuilder(){} // 析构函数 void BuildHead(){ // 建造人的头 this->m_person->SetHead("Thin Head"); std::cout <<"Build thin head..." <
m_person->SetBody("Thin Body"); std::cout <<"Build thin body..." <
m_person->SetFoot("Thin Foot"); std::cout <<"Build thin foot..." <
m_builder = builder; } void CreatePerson(){ this->m_builder->BuildHead(); // 利用建造者建造人的头 this->m_builder->BuildBody(); // 利用建造者建造人的躯体 this->m_builder->BuildFoot(); // 利用建造者建造人的脚 } ~Director(){ if(m_builder) delete m_builder; }protected: Builder *m_builder; //用来存储建造者};int main(int argc,char**argv) { std::cout <<"Start create thin person..." <
CreatePerson(); Person *thinPerson = thinBuilder->GetPerson(); thinPerson->ShowPerson(); std::cout <
CreatePerson( ); Person *fatPerson = fatBuilder->GetPerson( ); fatPerson->ShowPerson( ); std::cout <

类图:

../_images/Builder.jpg

建造者模式也是创建型模式的一种,能够对一个复杂类的创建起到更加精确的控制功能,在看effective java的时候看到了Builder Pattern,总结一下。

参考:

https://blog.csdn.net/gatieme/article/details/21512591

https://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/builder.html

转载于:https://www.cnblogs.com/J1ac/p/9732397.html

你可能感兴趣的文章
二叉搜索树的后序遍历序列
查看>>
纯C#的ini格式配置文件读写
查看>>
每日分享
查看>>
【干货】大数据框架整理
查看>>
年轻人,能用钱解决的,绝不要花时间(转)
查看>>
python2.7.X 升级至Python3.6.X
查看>>
VS调试方法
查看>>
jquery拖拽实现UI设计组件
查看>>
javamail模拟邮箱功能获取邮件内容-中级实战篇【内容|附件下载方法】(javamail API电子邮件实例)...
查看>>
白话排序算法--冒泡排序
查看>>
imx6 18bit display
查看>>
Spring静态属性注入
查看>>
实验10:指针2
查看>>
【转】hibernate缓存:一级缓存和二级缓存
查看>>
第二个spring冲刺第3天
查看>>
AwSnap:让全版本(Windows、iOS、Android)Chrome浏览器崩溃的有趣漏洞
查看>>
线段树合并学习笔记
查看>>
AndroidAutoLayout
查看>>
样本不均衡下的分类损失函数
查看>>
node启动服务后,窗口不能关闭。pm2了解一下
查看>>