c++如何实现建造者设计模式_c++分离复杂对象的构造与表示


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

c++如何实现建造者设计模式_c++分离复杂对象的构造与表示

建造者设计模式用于将复杂对象的构造过程与其表示分离,使得同样的构建过程可以创建不同的表示。在 C++ 中,这特别适用于需要通过多个步骤构造对象,且希望避免构造函数参数过多或初始化逻辑分散的情况。

基本结构与角色

建造者模式通常包含以下几个部分:

  • Product(产品类):要构建的复杂对象。
  • Builder(抽象建造者):定义创建产品各个部件的接口。
  • ConcreteBuilder(具体建造者):实现 Builder 接口,构造并装配产品的部件。
  • Director(指挥者):负责按顺序调用建造者的方法来构建产品,不关心最终产品的内部结构。

代码实现示例

以下是一个简单的例子,演示如何用 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口袋妖怪 Text-To-Pokemon口袋妖怪

输入文本生成自己的Pokemon,还有各种选项来定制自己的口袋妖怪

Text-To-Pokemon口袋妖怪 1487 查看详情 Text-To-Pokemon口袋妖怪

输出结果:

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

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.