温馨提示×

如何在C++中实现工厂模式

c++
小樊
83
2024-08-29 18:45:08
栏目: 编程语言

在C++中实现工厂模式通常涉及到一个抽象产品类(Product),一个或多个具体产品类(Concrete Product),以及一个抽象工厂类(Factory)和/或一个或多个具体工厂类(Concrete Factory)。下面是一个简单的示例:

  1. 定义抽象产品类(Product)

这是我们要创建的对象的接口。在这个例子中,我们将创建一个简单的形状接口。

class Shape {
public:
    virtual ~Shape() = default;
    virtual void draw() const = 0;
};
  1. 定义具体产品类(Concrete Product)

这些是实现了抽象产品类接口的具体类。在这个例子中,我们将创建两个具体的形状类:圆形和矩形。

#include<iostream>

class Circle : public Shape {
public:
    void draw() const override {
        std::cout << "Drawing a circle"<< std::endl;
    }
};

class Rectangle : public Shape {
public:
    void draw() const override {
        std::cout << "Drawing a rectangle"<< std::endl;
    }
};
  1. 定义抽象工厂类(Factory)

工厂类负责创建抽象产品的实例。在这个例子中,我们将创建一个形状工厂接口。

class ShapeFactory {
public:
    virtual ~ShapeFactory() = default;
    virtual std::unique_ptr<Shape> createShape() const = 0;
};
  1. 定义具体工厂类(Concrete Factory)

这些是实现了抽象工厂类接口的具体类。在这个例子中,我们将创建两个具体的形状工厂类:圆形工厂和矩形工厂。

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

class RectangleFactory : public ShapeFactory {
public:
    std::unique_ptr<Shape> createShape() const override {
        return std::make_unique<Rectangle>();
    }
};
  1. 使用工厂模式

现在我们可以使用这些工厂来创建形状对象,而不需要直接实例化它们。

#include<memory>

int main() {
    std::unique_ptr<ShapeFactory> factory = std::make_unique<CircleFactory>();
    std::unique_ptr<Shape> shape = factory->createShape();
    shape->draw();

    factory = std::make_unique<RectangleFactory>();
    shape = factory->createShape();
    shape->draw();

    return 0;
}

在这个例子中,我们首先创建了一个圆形工厂,然后使用它来创建一个圆形对象并调用其draw方法。然后我们改变了工厂,创建了一个矩形工厂,并用它来创建一个矩形对象并调用其draw方法。这样,我们就可以在运行时动态地改变要创建的对象的类型,而不需要修改客户端代码。

0