在C++中实现工厂模式通常涉及到一个抽象产品类(Product),一个或多个具体产品类(Concrete Product),以及一个抽象工厂类(Factory)和/或一个或多个具体工厂类(Concrete Factory)。下面是一个简单的示例:
定义抽象产品类(Product)这是我们要创建的对象的接口。在这个例子中,我们将创建一个简单的形状接口。
class Shape {public: virtual ~Shape() = default; virtual void draw() const = 0;};定义具体产品类(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; }};定义抽象工厂类(Factory)工厂类负责创建抽象产品的实例。在这个例子中,我们将创建一个形状工厂接口。
class ShapeFactory {public: virtual ~ShapeFactory() = default; virtual std::unique_ptr<Shape> createShape() const = 0;};定义具体工厂类(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>(); }};使用工厂模式现在我们可以使用这些工厂来创建形状对象,而不需要直接实例化它们。
#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方法。这样,我们就可以在运行时动态地改变要创建的对象的类型,而不需要修改客户端代码。




