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

c++如何实现工厂模式_c++工厂(Factory)设计模式实现方法

穿越時空
发布: 2025-10-29 16:02:02
原创
525人浏览过
工厂模式通过解耦对象创建提升代码灵活性,C++中可用基类指针与多态实现:1. 简单工厂根据参数创建具体产品;2. 工厂方法将创建延迟到子类;3. 抽象工厂用于创建相关对象族;4. 结合智能指针优化内存管理,避免泄漏。

c++如何实现工厂模式_c++工厂(factory)设计模式实现方法

工厂模式是一种创建型设计模式,用来解耦对象的创建过程。在C++中,通过基类指针和多态机制可以很好地实现工厂模式,使程序更灵活、易于扩展。

1. 简单工厂模式(Simple Factory)

简单工厂不是严格意义上的设计模式,但它是理解工厂概念的良好起点。它通过一个工厂类根据传入的参数决定创建哪一种具体产品。

假设我们有一个图形绘制程序,需要创建不同的图形对象:

// 图形基类
class Shape {
public:
    virtual void draw() = 0;
    virtual ~Shape() {}
};

// 具体图形类
class Circle : public Shape {
public:
    void draw() override {
        // 绘制圆形
    }
};

class Rectangle : public Shape {
public:
    void draw() override {
        // 绘制矩形
    }
};

// 工厂类
class ShapeFactory {
public:
    enum ShapeType { CIRCLE, RECTANGLE };

    static Shape* createShape(ShapeType type) {
        switch (type) {
            case CIRCLE:
                return new Circle();
            case RECTANGLE:
                return new Rectangle();
            default:
                return nullptr;
        }
    }
};

使用方式:

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

Shape* shape = ShapeFactory::createShape(ShapeFactory::CIRCLE);
shape->draw();
delete shape;

2. 工厂方法模式(Factory Method)

工厂方法模式将对象的创建延迟到子类。每个具体工厂负责创建对应的具体产品,符合开闭原则。

定义抽象工厂接口:

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();
    }
};

客户端代码:

天工大模型
天工大模型

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

天工大模型115
查看详情 天工大模型
ShapeFactory* factory = new CircleFactory();
Shape* shape = factory->createShape();
shape->draw();
delete shape;
delete factory;

3. 抽象工厂模式(Abstract Factory)

当需要创建一组相关或依赖对象时,使用抽象工厂。例如,不同主题下的按钮和文本框。

// 按钮基类
class Button {
public:
    virtual void click() = 0;
    virtual ~Button() {}
};

class WinButton : public Button {
public:
    void click() override { / Windows风格点击 / }
};

// 文本框基类
class TextBox {
public:
    virtual void display() = 0;
    virtual ~TextBox() {}
};

class WinTextBox : public TextBox {
public:
    void display() override { / Windows风格显示 / }
};

// 抽象工厂
class GUIFactory {
public:
    virtual Button createButton() = 0;
    virtual TextBox
createTextBox() = 0;
    virtual ~GUIFactory() = default;
};

// 具体工厂:Windows风格
class WinFactory : public GUIFactory {
public:
    Button* createButton() override {
        return new WinButton();
    }

    TextBox* createTextBox() override {
        return new WinTextBox();
    }
};

4. 使用智能指针优化内存管理

上面的例子使用了裸指针和手动 delete,容易出错。推荐使用智能指针避免内存泄漏。

修改返回类型为 std::unique_ptr:

#include <memory>

using ShapePtr = std::unique_ptr<Shape>;

class ShapeFactory {
public:
    virtual ShapePtr createShape() = 0;
    virtual ~ShapeFactory() = default;
};

class CircleFactory : public ShapeFactory {
public:
    ShapePtr createShape() override {
        return std::make_unique<Circle>();
    }
};

调用时无需手动释放资源,RAII 自动处理。

基本上就这些。工厂模式能有效分离对象创建与使用,提升代码可维护性。实际项目中结合配置或注册机制还能实现动态加载。

以上就是c++++如何实现工厂模式_c++工厂(Factory)设计模式实现方法的详细内容,更多请关注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号