建造者模式将复杂对象的构建过程与表示分离,通过Director调用具体Builder逐步构造Product,如用GamingComputerBuilder和OfficeComputerBuilder分别创建不同配置的Computer对象,实现构造流程统一且可扩展。

建造者设计模式用于将复杂对象的构造过程与其表示分离,使得同样的构建过程可以创建不同的表示。在 C++ 中,这特别适用于需要通过多个步骤构造对象,且希望避免构造函数参数过多或初始化逻辑分散的情况。
建造者模式通常包含以下几个部分:
以下是一个简单的例子,演示如何用 C++ 构建一个“电脑”对象,其配置可变(CPU、内存、硬盘)。
#include <iostream>
#include <string>
<p>// 产品类:Computer
class Computer {
public:
void setCPU(const std::string& cpu) { m_cpu = cpu; }
void setMemory(const std::string&
amp; memory) { m_memory = memory; }
void setHardDrive(const std::string& hd) { m_hardDrive = hd; }</p><pre class='brush:php;toolbar:false;'>void show() const {
std::cout << "Computer: " << m_cpu << ", "
<< m_memory << ", " << m_hardDrive << "\n";
}private: std::string m_cpu; std::string m_memory; std::string m_hardDrive; };
// 抽象建造者 class ComputerBuilder { public: virtual ~ComputerBuilder() = default; virtual void buildCPU() = 0; virtual void buildMemory() = 0; virtual void buildHardDrive() = 0; virtual Computer* getComputer() = 0; };
// 具体建造者:游戏电脑 class GamingComputerBuilder : public ComputerBuilder { public: GamingComputerBuilder() { m_computer = new Computer(); }
void buildCPU() override {
m_computer->setCPU("Intel i9");
}
void buildMemory() override {
m_computer->setMemory("32GB DDR4");
}
void buildHardDrive() override {
m_computer->setHardDrive("1TB SSD + 2TB HDD");
}
Computer* getComputer() override {
return m_computer;
}private: Computer* m_computer; };
// 具体建造者:办公电脑 class OfficeComputerBuilder : public ComputerBuilder { public: OfficeComputerBuilder() { m_computer = new Computer(); }
void buildCPU() override {
m_computer->setCPU("Intel i5");
}
void buildMemory() override {
m_computer->setMemory("16GB DDR4");
}
void buildHardDrive() override {
m_computer->setHardDrive("512GB SSD");
}
Computer* getComputer() override {
return m_computer;
}private: Computer* m_computer; };
// 指挥者 class Director { public: void setBuilder(ComputerBuilder* builder) { m_builder = builder; }
void construct() {
m_builder->buildCPU();
m_builder->buildMemory();
m_builder->buildHardDrive();
}private: ComputerBuilder* m_builder; };
通过 Director 控制构建流程,选择不同的 Builder 得到不同配置的 Computer 对象。
int main() {
Director director;
GamingComputerBuilder gamingBuilder;
OfficeComputerBuilder officeBuilder;
<pre class='brush:php;toolbar:false;'>// 构建游戏电脑
director.setBuilder(&gamingBuilder);
director.construct();
Computer* gamingPC = gamingBuilder.getComputer();
gamingPC->show();
// 构建办公电脑
director.setBuilder(&officeBuilder);
director.construct();
Computer* officePC = officeBuilder.getComputer();
officePC->show();
delete gamingPC;
delete officePC;
return 0;}
Text-To-Pokemon口袋妖怪
输入文本生成自己的Pokemon,还有各种选项来定制自己的口袋妖怪
1487
查看详情
输出结果:
Computer: Intel i9, 32GB DDR4, 1TB SSD + 2TB HDD Computer: Intel i5, 16GB DDR4, 512GB SSD
该模式的优点包括:
适合用于对象构建步骤多、配置组合复杂、希望屏蔽构造细节的场景,如 GUI 组件、文档生成器、序列化对象等。
基本上就这些,关键在于把“怎么做”和“做什么”分开。C++ 实现时注意资源管理,必要时可用智能指针替代裸指针。
以上就是c++++如何实现建造者设计模式_c++分离复杂对象的构造与表示的详细内容,更多请关注其它相关文章!
# 做什么
# 松溪网页seo价格
# 网站优化seo推广服务
# 上海图文营销推广方式
# 足球优化计算网站是什么
# 岳阳网站建设推广优化
# 沈阳网站建设模板选哪家
# seo高手挣钱
# 酒吧网站推广
# 网站建设横幅系列素材
# 地区网站怎样推广
# 中文网
# 相关文章
# 适用于
# 电脑
# 多个
# 几个
# 是一个
# 尼克
# 自己的
# 如何实现
# 封装性
# stream
# ios
# c++
# ai
# office
# 硬盘
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
惠普电脑BIOS界面看不懂怎么办_HP电脑BIOS功能选项解读与设置
支付宝登录刷脸不是本人如何解决
PHP中实现JSON数据数组分页的教程
《图怪兽》退出登录方法
Go语言中方法接收器的选择:值类型还是指针类型?
电子白板帮助菜单使用指南
《KARDS》冬季扩展包“国土阵线”上线!全新“协力”机制改变战场格局
VB表达式书写规则解析
vivo云服务一直提示空间不足怎么办 怎么办vivo云服务老是提示空间不足
青橙手机语音助手怎么唤醒_青橙手机语音助手设置与唤醒方法
抖音怎么解除第三方绑定_抖音解除第三方平台绑定方法介绍
网站体验不好=浪费钱:如何提升-用户体验效果差
苹果SE如何开启单手模式_苹果SE单手操作功能
《万兴喵影》导出视频方法
C++如何将字符串转换为大写或小写_C++ transform函数的使用技巧
12306夜间购票失败? | 查看官方公布的暂停服务公告与应对方案
苹果手机怎么合并照片_苹果手机合并多张照片的操作方法
Go Template中优雅处理循环最后一项:自定义函数实践
画质怪兽120帧安卓和平精英免费版
抖音号升级成企业资质怎么弄?有什么好处?
如何高效地基于键列值映射DataFrame中的多个列
微信步数怎么刷_微信步数快速提升技巧
顺丰快递单号查询寄件人 顺丰寄件人查询入口
《深林》冬季章节图文攻略
J*aScript二进制处理_ArrayBuffer与Blob
mysql如何配置从库只读_mysql从库只读设置方法
抖音如何解除|直播|权限绑定_抖音关闭并解绑|直播|功能的方法
鲁班大师乓乓皮肤获取方法
QQ网页版官方账号登录入口 QQ网页版网页版入口快速导航
4399造梦西游3无敌版_4399游戏入口
优化长HTML属性值:SonarQube警告与实用策略
Golang如何使用crypto/md5生成哈希_Golang MD5哈希生成方法
天堂漫画网页版在线阅读 天堂漫画手机版入口
快手网页版官方访问 快手网页版页面在线打开
中大网校app做题记录清除方法
如何在Golang中处理表单文件上传_Golang 表单文件上传示例
《火影忍者:木叶高手》快速升级攻略
如何定制PrimeNG Sidebar的背景颜色
从HTML表单获取逗号分隔值并转换为NumPy数组进行预测
谷歌浏览器如何查找和删除恶意软件 谷歌浏览器内置安全清理工具使用教程
解决jQuery多计算器输入字段冲突的教程
谷歌邮箱怎么换绑定邮箱Gmail安全备份邮箱修改方法
《原神》月之一版本新增书籍一览
知音漫客官网首页入口_知音漫客热门漫画推荐
Linux如何优化系统启动流程_Linux启动项优化方案
告别阻塞等待:如何使用GuzzlePromises优雅处理PHP异步操作,提升应用响应速度
vivo手机视频通话美颜怎么设置_vivo视频通话美颜开启方法
yy漫画官方网站登录入口_yy漫画在线阅读页面地址
解决CSS background 属性中 cover 关键字的常见误用
Yandex浏览器官方入口_Yandex搜索引擎中文版
2025-12-12
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。