工厂模式是将对象创建封装于工厂中以解耦客户端与具体类的依赖。通过工厂根据参数返回不同产品实例,如简单工厂中传入类型创建ConcreteProductA或B,提升可维护性与扩展性。

工厂模式是C++中常用的设计模式之一,主要用于解耦对象的创建过程。当系统需要在运行时决定创建哪种具体类的实例时,使用工厂模式可以提升代码的可维护性和扩展性。
工厂模式的核心思想是:将对象的创建封装起来,客户端不直接使用 new 来实例化具体类,而是通过一个“工厂”来获取对象。这样,新增类或修改类的创建逻辑时,不需要改动大量已有代码。
简单工厂不是严格意义上的设计模式,但常被用作入门示例。它通过一个工厂类根据传入参数决定返回哪个具体类的实例。
示例代码:定义产品基类:
class Product {
public:
virtual void use() = 0;
virtual ~Product() = default;
};
class ConcreteProductA : public Product {
public:
void use() override {
std::cout << "Using Product A\n";
}
};
class ConcreteProductB : public Product {
public:
void use() override {
std::cout << "Using Product B\n";
}
};
定义工厂类:
class SimpleFactory {
public:
static std::unique_ptr<Product> createProduct(char type) {
if (type == 'A') {
return std::make_unique<ConcreteProductA>();
} else if (type == 'B') {
return std::make_unique<ConcreteProductB>();
}
return nullptr;
}
};
使用方式:
auto product = SimpleFactory::createProduct('A');
product->use();
工厂方法模式将对象的创建延迟到子类。定义一个创建对象的接口,由子类决定实例化哪一个类。
定义工厂接口:
NoCode
美团推出的零代码应用生成平台
180
查看详情
class Factory {
public:
virtual std::unique_ptr<Product> createProduct() = 0;
virtual ~Factory() = default;
};
class ConcreteFactoryA : public Factory {
public:
std::unique_ptr<Product> createProduct() override {
return std::make_unique<ConcreteProductA>();
}
};
class ConcreteFactoryB : public Factory {
public:
std::unique_ptr<Product> createProduct() override {
return std::make_unique<ConcreteProductB>();
}
};
使用方式:
std::unique_ptr<Factory> factory = std::make_unique<ConcreteFactoryA>(); auto product = factory->createProduct(); product->use();
这种方式更符合开闭原则。增加新产品时,只需添加新的工厂和产品类,无需修改原有代码。
抽象工厂用于创建一系列相关或依赖的对象,而无需指定具体类。适合构建产品族。
扩展产品类:
class Button {
public:
virtual void render() = 0;
virtual ~Button() = default;
};
class WindowsButton : public Button {
public:
void render() override {
std::cout << "Render Windows button\n";
}
};
class MacButton : public Button {
public:
void render() override {
std::cout << "Render Mac button\n";
}
};
抽象工厂接口:
class GUIFactory {
public:
virtual std::unique_ptr<Button> createButton() = 0;
virtual ~GUIFactory() = default;
};
class WindowsFactory : public GUIFactory {
public:
std::unique_ptr<Button> createButton() override {
return std::make_unique<WindowsButton>();
}
};
class MacFactory : public GUIFactory {
public:
std::unique_ptr<Button> createButton() override {
return std::make_unique<MacButton>();
}
};
客户端可以根据系统类型选择对应的工厂,统一创建整套界面控件。
基本上就这些。掌握工厂模式有助于写出更清晰、易扩展的C++代码。关键在于理解“封装变化”的思想,把对象创建这个易变点集中管理。
以上就是C++怎么实现一个工厂模式_C++常用设计模式与Factory Pattern解析的详细内容,更多请关注其它相关文章!
# 简单工厂模式
# seo流量转化
# 相关文章
# 只需
# 已有
# 不需要
# 更清晰
# 如何实现
# 如何使用
# 客户端
# 多核
# 子类
# c++
# 维护网站信息流优化运营
# 肇庆营销推广找谁
# 新媒体营销推广就找vs火10星
# 宿迁网站建设哪里有
# 厦门网站快速建设
# 台江区一般seo公司
# 兰州网站系统优化
# 肥东网站优化定制公司
# 金融与seo结合
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
12306售票时间最新规定 | 网上订票和车站窗口时间一样吗
steam缓存文件在哪儿_steam缓存文件的路径查找方法与结构说明
毒蘑菇VOLUMESHADER_BM官网首页登录入口 毒蘑菇VOLUMESHADER_BM官网首页登录入口说明
铁路12306座位怎么选_12306官方选座操作方法
手机坏了微信聊天记录怎么导出来 新手机恢复聊天记录技巧
申通快递查询 申通物流快递单实时查询入口
菜鸟驿站的取件码忘了怎么办 手机快速查询指南
Yandex无需登录畅游 俄罗斯搜索引擎最新官网指南
Win10如何关闭开机锁屏界面_Windows10跳过锁屏直接登录设置
苹果手机聊天记录删除了如何恢复
《盗墓笔记手游》技能介绍
《王者荣耀世界》英雄获取攻略
微博网页版入口链接 微博网页版在线互动平台
高德地图导航路线偏差报警频繁怎么办 高德地图路线偏差修复与优化方法
C++怎么解决数值计算中的精度问题_C++浮点数误差与数值稳定性分析
哈尔滨城市通昵称修改方法
SQL聚合查询、联接与筛选:GROUP BY 子句的正确使用与常见陷阱
《植物大战僵尸3》火龙草作用介绍
t3出行如何使用微信支付
广州地铁app准妈咪徽章领取方法
《桃源记2》资源采集攻略
Sublime怎么配置YAML文件格式化_Sublime YAML Formatter插件教程
MySQL多重关联查询:利用别名高效获取同一表的多个关联字段
汽水音乐网页端访问 汽水音乐官方网页直达
热血江湖归来医师加点攻略
QQ邮箱官方登录页_腾讯出品安全稳定的邮箱服务
获取WooCommerce产品在后台编辑页面的分类ID
铁路12306入口 铁路12306官网版入口登录网址
解决J*aScript动态图片上传中ID重复问题:在同一页面显示多张独立图片
C++ bind函数使用教程_C++参数绑定与函数适配器的应用
动漫岛在线动漫网 动漫岛动漫在线观看官方入口
J*a中逻辑运算符如何使用_逻辑与或非的基础用法讲解
纯CSS实现滚动时动态时间轴线条颜色填充效果
PHP utf8_encode 字符编码转换疑难解析与最佳实践
在PySimpleGUI中实现键盘按键绑定按钮事件
Win10显卡驱动安装失败怎么办 Win10使用DDU彻底卸载驱动【解决】
红手指专业版app注册教程
店铺如何关联视频号推广?视频号推广有什么用?
追剧达人如何发弹幕
mysql镜像配置如何恢复数据_mysql镜像配置数据恢复详细流程
电脑桌面图标怎么变大变小_Windows个性化设置第一课【新手入门】
《雷电模拟器》自动点击设置方法
Windows 11怎么删除恢复分区_Windows 11使用Diskpart命令强行删除分区
《书耽》更换手机号方法
c++如何实现观察者设计模式_c++行为型设计模式实战
解决Windows上Composer PATH变量冲突导致的命令无法识别问题
OPPO A3 WiFi频繁断开怎么办 OPPO A3网络优化技巧
荣耀Magic6 Pro拍照成像偏暗_荣耀Magic6 Pro夜景优化
照片整理的黄金法则是怎样的? 理解“收集-筛选-归档-备份”四步流程
《腾讯相册管家》注销账号方法
2025-11-25
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。