写一个关于桥接模式的案列
时间: 2024-06-16 11:03:26 浏览: 8
桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化。桥接模式通过将继承关系转化为关联关系,从而实现了抽象和实现的解耦。
下面是一个关于桥接模式的简单案例:
假设我们要设计一个图形绘制程序,可以绘制不同类型的图形(如圆形、矩形)并选择不同的颜色(如红色、蓝色)进行填充。使用桥接模式可以将图形和颜色的选择进行解耦。
首先,我们定义一个抽象类Shape,它有一个成员变量color和一个纯虚函数draw()用于绘制图形:
```cpp
class Shape {
protected:
Color* color;
public:
virtual void draw() = 0;
void setColor(Color* c) {
color = c;
}
};
```
然后,我们定义两个具体的图形类Circle和Rectangle,它们都继承自Shape,并实现draw()函数:
```cpp
class Circle : public Shape {
public:
void draw() override {
cout << "绘制圆形" << endl;
color->fill();
}
};
class Rectangle : public Shape {
public:
void draw() override {
cout << "绘制矩形" << endl;
color->fill();
}
};
```
接下来,我们定义一个颜色类Color,它也是一个抽象类,有一个纯虚函数fill()用于填充颜色:
```cpp
class Color {
public:
virtual void fill() = 0;
};
```
然后,我们定义两个具体的颜色类Red和Blue,它们都继承自Color,并实现fill()函数:
```cpp
class Red : public Color {
public:
void fill() override {
cout << "填充红色" << endl;
}
};
class Blue : public Color {
public:
void fill() override {
cout << "填充蓝色" << endl;
}
};
```
最后,我们可以使用桥接模式来绘制不同类型的图形并选择不同的颜色进行填充:
```cpp
int main() {
Shape* shape = new Circle();
shape->setColor(new Red());
shape->draw();
shape = new Rectangle();
shape->setColor(new Blue());
shape->draw();
delete shape;
return 0;
}
```
输出结果为:
```
绘制圆形
填充红色
绘制矩形
填充蓝色
```
这样,通过桥接模式,我们可以在运行时动态地选择图形和颜色的组合,而不需要修改已有的代码。