C++实现桥接模式的抽象工厂
时间: 2023-09-23 11:06:50 浏览: 111
桥接模式和抽象工厂是两个不同的设计模式,但是可以结合使用。下面我来简单介绍一下如何在C++中实现桥接模式和抽象工厂。
首先,我们需要定义桥接模式中的抽象类和实现类。假设我们要实现一个图形库,可以绘制不同类型的图形,包括圆形、矩形和三角形。我们可以定义一个抽象类Shape,表示图形的基本属性和方法:
```cpp
class Shape {
public:
virtual void draw() = 0;
virtual ~Shape() {}
};
```
然后,我们定义三个实现类,分别表示圆形、矩形和三角形:
```cpp
class Circle : public Shape {
public:
void draw() override {
cout << "Draw Circle." << endl;
}
};
class Rectangle : public Shape {
public:
void draw() override {
cout << "Draw Rectangle." << endl;
}
};
class Triangle : public Shape {
public:
void draw() override {
cout << "Draw Triangle." << endl;
}
};
```
接下来,我们需要实现桥接模式中的桥接类,它将抽象类和实现类进行桥接。假设我们要支持不同的绘制方式,包括OpenGL和DirectX。我们可以定义一个抽象类DrawAPI,表示绘制的基本属性和方法:
```cpp
class DrawAPI {
public:
virtual void draw() = 0;
virtual ~DrawAPI() {}
};
```
然后,我们定义两个实现类,分别表示OpenGL和DirectX的绘制方式:
```cpp
class OpenGLAPI : public DrawAPI {
public:
void draw() override {
cout << "Draw using OpenGL." << endl;
}
};
class DirectXAPI : public DrawAPI {
public:
void draw() override {
cout << "Draw using DirectX." << endl;
}
};
```
最后,我们需要使用抽象工厂来创建图形和绘制方式的组合。我们可以定义一个抽象工厂类AbstractFactory,表示图形和绘制方式的组合:
```cpp
class AbstractFactory {
public:
virtual Shape* createShape() = 0;
virtual DrawAPI* createDrawAPI() = 0;
virtual ~AbstractFactory() {}
};
```
然后,我们定义两个具体的工厂类,分别表示OpenGL和DirectX的图形和绘制方式的组合:
```cpp
class OpenGLFactory : public AbstractFactory {
public:
Shape* createShape() override {
return new Circle();
}
DrawAPI* createDrawAPI() override {
return new OpenGLAPI();
}
};
class DirectXFactory : public AbstractFactory {
public:
Shape* createShape() override {
return new Rectangle();
}
DrawAPI* createDrawAPI() override {
return new DirectXAPI();
}
};
```
最后,我们可以使用这些类来绘制图形。例如,我们可以使用OpenGL和圆形来绘制一个图形:
```cpp
AbstractFactory* factory = new OpenGLFactory();
Shape* shape = factory->createShape();
DrawAPI* api = factory->createDrawAPI();
api->draw();
shape->draw();
```
输出结果为:
```
Draw using OpenGL.
Draw Circle.
```
这就是桥接模式和抽象工厂在C++中的实现。通过使用桥接模式和抽象工厂,我们可以将抽象类和实现类进行解耦,从而实现更加灵活和可扩展的设计。
阅读全文