值得一看
广告
彩虹云商城
广告

热门广告位

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

工厂方法模式通过子类决定实例化类,实现创建与使用的解耦。示例中定义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 实现,更简洁。

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

相关标签:

ai c++ switch switch 封装 子类 字符串 int void 存储类 指针 接口 class public map delete 对象 default

大家都在看:

如何配置C++的AI推理框架环境 TensorRT加速库安装使用
C++与AI部署:ONNX Runtime集成全解析
c++中怎么把整数转换成二进制字符串_c++整数转二进制方法
C++20的std::format库怎么用_C++字符串格式化新特性详解
C++怎么设置跨平台的编译环境_C++跨平台构建与CMake配置技巧
温馨提示: 本文最后更新于2025-10-27 16:32:41,某些文章具有时效性,若有错误或已失效,请在下方留言或联系在线客服
文章版权声明 1 本网站名称: 创客网
2 本站永久网址:https://new.ie310.com
1 本文采用非商业性使用-相同方式共享 4.0 国际许可协议[CC BY-NC-SA]进行授权
2 本站所有内容仅供参考,分享出来是为了可以给大家提供新的思路。
3 互联网转载资源会有一些其他联系方式,请大家不要盲目相信,被骗本站概不负责!
4 本网站只做项目揭秘,无法一对一教学指导,每篇文章内都含项目全套的教程讲解,请仔细阅读。
5 本站分享的所有平台仅供展示,本站不对平台真实性负责,站长建议大家自己根据项目关键词自己选择平台。
6 因为文章发布时间和您阅读文章时间存在时间差,所以有些项目红利期可能已经过了,能不能赚钱需要自己判断。
7 本网站仅做资源分享,不做任何收益保障,创业公司上收费几百上千的项目我免费分享出来的,希望大家可以认真学习。
8 本站所有资料均来自互联网公开分享,并不代表本站立场,如不慎侵犯到您的版权利益,请联系79283999@qq.com删除。

本站资料仅供学习交流使用请勿商业运营,严禁从事违法,侵权等任何非法活动,否则后果自负!
THE END
喜欢就支持一下吧
点赞12赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容