c++桥接模式具体实例
时间: 2024-05-25 13:06:43 浏览: 15
C++桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化。桥接模式通过将继承关系转化为关联关系,从而实现了解耦。
下面是一个具体的C++桥接模式实例:
假设我们有一个图形类 Shape,它有两个子类:Circle(圆)和Square(正方形)。我们还有一个颜色类 Color,它有两个子类:Red(红色)和Blue(蓝色)。我们希望能够在不修改图形类和颜色类的情况下,动态地组合它们。
首先,我们定义一个抽象类 Shape,其中包含一个指向颜色类的指针:
```cpp
class Shape {
protected:
Color* color;
public:
virtual void draw() = 0; void setColor(Color* c) {
color = c;
}
};
```
然后,我们定义两个具体的图形类 Circle 和 Square,它们都继承自 Shape 类,并实现 draw() 方法:
```cpp
class Circle : public Shape {
public:
void draw() {
cout << "Drawing a circle ";
color->fill();
}
};
class Square : public Shape {
public:
void draw() {
cout << "Drawing a square ";
color->fill();
}
};
```
接下来,我们定义一个抽象类 Color,其中包含一个 fill() 方法:
```cpp
class Color {
public:
virtual void fill() = 0;
};
```
然后,我们定义两个具体的颜色类 Red 和 Blue,它们都继承自 Color 类,并实现 fill() 方法:
```cpp
class Red : public Color {
public:
void fill() {
cout << "with red color." << endl;
}
};
class Blue : public Color {
public:
void fill() {
cout << "with blue color." << endl;
}
};
```
最后,我们可以使用桥接模式来动态地组合图形和颜色:
```cpp
int main() {
Shape* shape = new Circle();
Color* color = new Red();
shape->setColor(color);
shape->draw();
delete shape;
delete color;
return 0;
}
```
运行上述代码,输出结果为:
```
Drawing a circle with red color.
```
这个例子中,我们可以通过设置不同的颜色对象来改变图形的填充颜色,而不需要修改图形类的代码。这就是桥接模式的优势所在。