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

工厂模式是一种创建型设计模式,用来解耦对象的创建过程。在C++中,通过基类指针和多态机制可以很好地实现工厂模式,使程序更灵活、易于扩展。
简单工厂不是严格意义上的设计模式,但它是理解工厂概念的良好起点。它通过一个工厂类根据传入的参数决定创建哪一种具体产品。
假设我们有一个图形绘制程序,需要创建不同的图形对象:
// 图形基类// 具体图形类
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);工厂方法模式将对象的创建延迟到子类。每个具体工厂负责创建对应的具体产品,符合开闭原则。
定义抽象工厂接口:
class ShapeFactory {// 具体工厂
class CircleFactory : public ShapeFactory {
public:
    Shape* createShape() override {
        return new Circle();
    }
};
class RectangleFactory : public ShapeFactory {
public:
    Shape* createShape() override {
        return new Rectangle();
    }
};
客户端代码:
ShapeFactory* factory = new CircleFactory();当需要创建一组相关或依赖对象时,使用抽象工厂。例如,不同主题下的按钮和文本框。
// 按钮基类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();
    }
};
上面的例子使用了裸指针和手动 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++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
 
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号