新闻中心
c++如何实现工厂模式_c++创建型设计模式Factory Method【源码】
工厂模式在C++中通过封装对象创建过程,避免调用方直接new具体类;Factory Method模式定义创建接口,由子类决定实例化哪个类,包含抽象产品、具体产品、抽象工厂和具体工厂四部分。

工厂模式在 C++ 中核心是把对象的创建过程封装起来,让调用方不直接 new 具体类,而是通过统一接口获取对象。Factory Method(工厂方法)属于创建型模式,它定义一个创建对象的接口,但由子类决定实例化哪个类。
基本结构:抽象工厂 + 具体工厂 + 产品族
典型 Factory Method 模式包含四部分:
-
Product(抽象产品):定义产品接口
,比如 class Shape { public: virtual void draw() = 0; }; -
ConcreteProduct(具体产品):如
class Circle : public Shape { void draw() override { cout <li> <strong>Creator(抽象工厂)</strong>:声明工厂方法 <code>virtual Product* createProduct() = 0;,不实现具体创建逻辑; -
ConcreteCreator(具体工厂):重写工厂方法,返回对应具体产品,如
class CircleFactory : public Creator { Product* createProduct() override { return new Circle; } };</li></ul><H3>一个可运行的最小示例(C++17)</H3><p>下面代码无依赖、可直接编译运行,体现 Factory Method 的解耦本质:</p><font color="#888"><pre class="brush:php;toolbar:false;"> #include <iostream> #include <memory> #include <string> <p>// 抽象产品 struct Product { virtual ~Product() = default; virtual std::string name() const = 0; };</p><p>// 具体产品 A struct ConcreteProductA : Product { std::string name() const override { return "ProductA"; } };</p><p>// 具体产品 B struct ConcreteProductB : Product { std::string name() const override { return "ProductB"; } };</p><p>// 抽象工厂(Creator) struct Creator { // 工厂方法:由子类决定返回哪种产品 virtual std::unique_ptr<Product> create() = 0; virtual ~Creator() = default; };</p><p>// 具体工厂 A struct CreatorA : Creator { std::unique_ptr<Product> create() override { return std::make_unique<ConcreteProductA>(); } };</p><p>// 具体工厂 B struct CreatorB : Creator { std::unique_ptr<Product> create() override { return std::make_unique<ConcreteProductB>(); } };</p><p>// 使用示例 int main() { CreatorA factoryA; auto p1 = factoryA.create(); std::cout << p1->name() << '\n'; // 输出:ProductA</p><pre class='brush:php;toolbar:false;'>CreatorB factoryB; auto p2 = factoryB.create(); std::cout << p2->name() << '\n'; // 输出:ProductB return 0;}
简小派
简小派是一款AI原生求职工具,通过简历优化、岗位匹配、项目生成、模拟面试与智能投递,全链路提升求职成功率,帮助普通人更快拿到更好的 offer。
123
查看详情
为什么用 unique_ptr 而不是 raw pointer?
现代 C++ 推荐用智能指针管理工厂返回的对象生命周期:
- 避免手动
delete 导致内存泄漏或重复释放; -
std::unique_ptr明确所有权,语义清晰; - 若需共享所有权,可用
std::shared_ptr,但要评估是否真需要共享; - 工厂方法返回值类型统一为智能指针,调用方无需关心析构细节。
和简单工厂、抽象工厂的区别要点
别混淆这几个“工厂”:
-
简单工厂:不是 GoF 模式,只是一个普通工具类(如
ShapeFactory::create("circle")),违反开闭原则; - Factory Method:用继承扩展创建逻辑,新增产品只需加新工厂子类,符合开闭原则;
- 抽象工厂(Abstract Factory):创建“产品族”,比如同时创建 Button + TextBox(Win 系列 / Mac 系列),比 Factory Method 更高层。
基本上就这些。Factory Method 的价值不在代码多炫,而在把“变”的创建逻辑隔离到子类,让核心业务代码只依赖抽象——改需求时,往往只动工厂子类,不动主流程。
- 避免手动
以上就是c++++如何实现工厂模式_c++创建型设计模式Factory Method【源码】的详细内容,更多请关注其它相关文章!
# 中文网
# 西充网络推广部招聘网站
# 仙桃农业网站推广项目
# 沽源视频号推广营销工具商城
# 百度seo 推广技术
# 流量指数seo优化公式
# 本溪网站推广公司排名
# 银川门户网站推广平台
# 成都购物网站建设文案
# 建设网站哪个平台好用些
# 关键词推广渠道排名
# c++
# 相关文章
# 而在
# 只需
# 开闭
# 运算符
# 有什么区别
# 如何使用
# 如何实现
# 子类
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
QQ邮箱网页版入口 QQ邮箱官方邮箱登录通道
优化Log4j2控制台输出性能:解决异步日志瓶颈
腾讯视频怎么举报不良内容_腾讯视频内容举报流程与违规信息处理方法
优化 Python 函数中的条件逻辑:解决 if-else 嵌套与参数选择问题
php源码怎么看淘宝客系统_看php源码淘宝客系统技巧
TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法
sublime侧边栏怎么增强功能_SideBarEnhancements for sublime安装与配置
优化大型XML文件解析:基于Python流式处理的内存高效方案
windows10怎么查看硬盘序列号_windows10硬盘id查询命令
Composer如何在生产环境安全地执行composer update
Angular响应式表单:实现提交后表单及按钮的禁用与只读化
深入理解与实现最大堆的Heapify过程:常见错误与修正
在J*a中如何使用Stream.map转换元素_Stream映射操作解析
在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案
Python:递归比较文件夹内容并找出特定类型文件的差异
MongoDB Aggregation:在嵌套对象数组中精确匹配ObjectId
12306选座系统怎么选连座_12306选座多人连坐操作方法
vivo手机参数配置怎么增强信号_vivo手机参数配置信号增强方法
深入理解rpy2中的类型转换:优化Python对象到R矩阵的映射
Win11网速慢怎么解决 Win11网络设置优化解除限速
Golang如何实现状态模式管理对象状态_Golang State模式实现技巧
Win11怎么修改默认浏览器_Windows 11设置Chrome为默认
Django表单提交验证失败后保持字段值不刷新
R星幕后开发视频泄露 包含《GTA6》等多款大作
qq游戏手机版下载安装_qq游戏移动端入口
内存检查:在VS Code中调试C++时的内存视图
没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享
J*aScript数组对象转换:按指定键分组与值收集
期待已久:小米17 Ultra、小米首款NAS本月登场
优化Django表单:提交验证失败后保留用户输入
J*a里如何使用forEach遍历Map_Map遍历方法说明
Python异步编程实践:使用Binance API构建实时交易数据流
Lar*el 8 多关键词数据库搜索优化实践
CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色
反效果?《战地6》免费试玩开启后玩家数不升反降
css子元素高度不一致导致布局错位怎么办_使用align-items:stretch解决高度差异
深入理解Promise链:如何在catch后中断then的执行
苹果手机如何防止被恶意App追踪
京东京造J1和网易云音乐氧气真无线有什么不同_国产电商蓝牙耳机音质对比
J*aScript动态修改指定div内所有a标签样式指南
PyTorch模型训练准确率不提升:诊断与修复常见指标计算错误
蛙漫移动版在线看 蛙漫手机浏览器直达入口
C++如何解决segmentation fault_C++段错误调试与原因分析
J*a应用集成GitHub CLI与API认证指南
大象笔记网页版入口 印象笔记网页版登录入口
韩剧圈正版入口页面_韩剧圈官网登录链接
Lar*el表单中优雅地处理“返回”按钮以规避验证:最佳实践指南
抖音网页版快捷访问 抖音网页版网页版入口操作教程
ExcelARRAYTOTEXT函数怎么自定义分隔符输出数组文本_ARRAYTOTEXT实现动态生成SQL语句
电脑IP地址怎么查 查看本机IP地址的几种方法


2025-12-06
浏览次数:次
返回列表
,比如