21xrx.com
2024-11-05 22:38:24 Tuesday
登录
文章检索 我的文章 写文章
C++ 工厂函数
2023-07-09 21:46:40 深夜i     --     --
C++ 工厂函数 创建对象 构造函数 封装性

在 C++ 中,工厂函数是一种特殊的函数,用于创建对象。它们通常被用来隐藏实现细节,并提供更好的灵活性和控制性。在工厂函数模式中,所有对象的创建都由工厂函数完成,这样就可以将对象创建的实现从客户端代码中分离出来,减少代码的耦合性。

工厂函数的优点在于,可以将对象的创建和程序的其他部分分离开来。这使得代码更容易维护和修改,因为客户端代码不需要了解对象的创建细节,只需要调用工厂函数即可。此外,工厂函数也可以隐藏对象的实现细节,从而强制客户端代码使用抽象接口,而不是具体的实现。

在 C++ 中,工厂函数通常由一个类或一个命名空间中的静态函数来实现。工厂函数可以根据传入参数的不同,创建不同的对象。例如,如果需要创建一个形状对象,可以使用工厂函数来根据不同的参数创建不同的形状,比如圆形、矩形、三角形等。

工厂函数的实现方式有多种,其中一种常见的方式是使用简单工厂模式。在简单工厂模式中,我们可以创建一个工厂类,它负责创建对象并将其返回给客户端代码。具体实现可以使用继承或接口方式。

例如,下面是一个简单工厂类 ShapeFactory 的实现:


#include <iostream>

#include <string>

using namespace std;

//基类,定义一个形状接口

class Shape {

public:

  virtual void draw() = 0;

};

//圆形类

class Circle : public Shape {

public:

  void draw() {

    cout << "Circle::draw()\n";

  }

};

//矩形类

class Rectangle : public Shape {

public:

  void draw() {

    cout << "Rectangle::draw()\n";

  }

};

//三角形类

class Triangle : public Shape {

public:

  void draw() {

    cout << "Triangle::draw()\n";

  }

};

//工厂类,根据传入的参数创建不同的形状

class ShapeFactory {

public:

  Shape* createShape(string shapeType) {

    if (shapeType == "circle") {

      return new Circle();

    }

    else if (shapeType == "rectangle") {

      return new Rectangle();

    }

    else if (shapeType == "triangle") {

      return new Triangle();

    }

    else

      return NULL;

    

  }

};

//测试

int main() {

  ShapeFactory *factory = new ShapeFactory();

  Shape* shape1 = factory->createShape("circle");

  shape1->draw();

  Shape* shape2 = factory->createShape("rectangle");

  shape2->draw();

  Shape* shape3 = factory->createShape("triangle");

  shape3->draw();

  return 0;

}

在上面的示例中,我们创建了一个 Shape 类和三个子类 Circle、Rectangle 和 Triangle。然后,我们创建了一个 ShapeFactory 工厂类,它根据传入的参数创建不同的形状对象。最后,我们使用工厂类创建三个不同形状的对象,并测试其 draw() 方法。

在工厂函数模式中,工厂类可以根据需要创建不同的对象,从而实现对象的动态创建和灵活性。工厂函数也可以隐藏对象的实现细节,从而保护客户端代码的稳定性和安全性。因此,工厂函数是一种非常有用的设计模式,可以在 C++ 中轻松实现。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复