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

avatar
作者
筋斗云
阅读量:0

在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方法。这样,我们就可以在运行时动态地改变要创建的对象的类型,而不需要修改客户端代码。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!