首页 > 后端开发 > C++ > 正文

c++怎么实现一个工厂设计模式_c++工厂模式实现示例

下次还敢
发布: 2025-10-27 16:20:02
原创
859人浏览过
工厂方法模式通过子类决定实例化类,实现创建与使用的解耦。示例中定义Shape产品接口及Circle、Rectangle具体产品,配合ShapeFactory工厂接口和CircleFactory、RectangleFactory具体工厂,实现图形对象的灵活创建。main函数演示通过不同工厂生成对应图形并调用draw方法。建议使用智能指针管理内存,提升安全性,并可结合注册机制实现按名称创建对象,适用于需动态扩展产品的场景。

c++怎么实现一个工厂设计模式_c++工厂模式实现示例

工厂设计模式用于将对象的创建过程封装起来,让子类决定实例化哪一个类。C++中常见的工厂模式有简单工厂、工厂方法和抽象工厂。下面以工厂方法模式为例,展示一个清晰、实用的实现方式。

1. 工厂方法模式结构说明

工厂方法模式定义一个创建对象的接口,但由子类决定要实例化的类是哪一个。这样把实例化操作推迟到子类。

主要角色:

  • Product(产品):定义产品的接口。
  • ConcreteProduct(具体产品):实现 Product 接口的具体类。
  • Factory(工厂):声明创建产品对象的方法。
  • ConcreteFactory(具体工厂):实现工厂方法,返回一个具体产品实例。

2. C++ 实现示例

假设我们要生产不同类型的图形(如圆形、矩形),通过工厂来创建。

立即学习C++免费学习笔记(深入)”;

天工大模型
天工大模型

中国首个对标ChatGPT的双千亿级大语言模型

天工大模型115
查看详情 天工大模型

// Product 抽象基类 class Shape { public: virtual void draw() = 0; virtual ~Shape() = default; };

// 具体产品类 class Circle : public Shape { public: void draw() override { std::cout << "绘制圆形" << std::endl; } };

class Rectangle : public Shape { public: void draw() override { std::cout << "绘制矩形" << std::endl; } };

// 工厂基类 class ShapeFactory { public: virtual Shape* createShape() = 0; virtual ~ShapeFactory() = default; };

// 具体工厂类 class CircleFactory : public ShapeFactory { public: Shape* createShape() override { return new Circle(); } };

class RectangleFactory : public ShapeFactory { public: Shape* createShape() override { return new Rectangle(); } };

3. 使用方式

通过具体工厂创建对象,调用其行为:

int main() { // 创建圆形工厂并生成对象 ShapeFactory factory = new CircleFactory(); Shape shape = factory->createShape(); shape->draw(); // 输出:绘制圆形

// 切换为矩形工厂
delete factory;
delete shape;

factory = new RectangleFactory();
shape = factory->createShape();
shape->draw();  // 输出:绘制矩形

// 清理资源
delete factory;
delete shape;

return 0;
登录后复制

}

4. 改进建议与注意事项

上面示例使用了原始指针和 new/delete,实际项目中可结合智能指针提升安全性:

  • 返回 std::unique_ptr<Shape> 避免内存泄漏。
  • 工厂方法可以配合注册机制实现“根据字符串创建对象”,比如 map 存储类型名到创建函数。
  • 若产品种类固定,也可用简单工厂 + switch 实现,更简洁。

基本上就这些。工厂模式的核心是解耦对象的使用和创建,适合需要灵活扩展产品类型的场景。

以上就是c++++怎么实现一个工厂设计模式_c++工厂模式实现示例的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号