使用C++举一个抽象工厂模式的例子
时间: 2024-09-27 17:07:32 浏览: 61
C++设计模式之抽象工厂模式
5星 · 资源好评率100%
抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖的对象的方式,而无需指定它们具体的类。这种方式可以隐藏对象的创建过程,并允许客户端以统一的接口访问各种产品。
下面是一个简单的C++抽象工厂例子,假设我们要创建一系列图形相关的对象,如圆形、矩形和椭圆:
```cpp
// 抽象工厂
class ShapeFactory {
public:
virtual std::shared_ptr<Shape> createCircle() = 0;
virtual std::shared_ptr<Shape> createRectangle() = 0;
virtual std::shared_ptr<Shape> createEllipse() = 0;
};
// 具体工厂
class CircleFactory : public ShapeFactory {
public:
std::shared_ptr<Shape> createCircle() override {
return std::make_shared<Circle>();
}
};
class RectangleFactory : public ShapeFactory {
public:
std::shared_ptr<Shape> createRectangle() override {
return std::make_shared<Rectangle>();
}
};
class EllipseFactory : public ShapeFactory {
public:
std::shared_ptr<Shape> createEllipse() override {
return std::make_shared<Ellipse>();
}
};
// 抽象形状
class Shape {
public:
virtual ~Shape() {}
virtual void draw() = 0;
};
// 具体形状
class Circle : public Shape {
public:
void draw() override {
// 圆形绘制逻辑
}
};
class Rectangle : public Shape {
public:
void draw() override {
// 矩形绘制逻辑
}
};
class Ellipse : public Shape {
public:
void draw() override {
// 椭圆绘制逻辑
}
};
int main() {
ShapeFactory* factory = new CircleFactory(); // 创建特定工厂实例
std::shared_ptr<Shape> circle = factory->createCircle();
circle->draw();
factory = new RectangleFactory();
std::shared_ptr<Shape> rectangle = factory->createRectangle();
rectangle->draw();
factory = new EllipseFactory();
std::shared_ptr<Shape> ellipse = factory->createEllipse();
ellipse->draw();
delete factory; // 释放工厂
return 0;
}
```
在这个例子中,`ShapeFactory`是抽象工厂,`CircleFactory`, `RectangleFactory`, 和 `EllipseFactory`是具体工厂,`Shape`是抽象类,`Circle`, `Rectangle`, 和 `Ellipse`是具体形状。通过这个模式,我们可以在不知道具体形状的情况下创建并操作图形。
阅读全文