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

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

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

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

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

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

主要角色:

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

2. C++ 实现示例

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

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

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

// 具体产品类class Circle : public Shape {public:void draw() override {std::cout

class Rectangle : public Shape {public:void draw() override {std::cout

// 工厂基类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 避免内存泄漏。工厂方法可以配合注册机制实现“根据字符串创建对象”,比如 map 存储类型名到创建函数。若产品种类固定,也可用简单工厂 + switch 实现,更简洁。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1481128.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 05:13:00
下一篇 2025年12月8日 14:57:53

相关推荐

发表回复

登录后才能评论
关注微信