您的位置:首页 > 编程语言 > C语言/C++

C++与设计模式(10)——桥接模式

2016-11-14 21:00 309 查看

桥接模式

定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化

这种说法可能不太好理解,那我们有另一种说法,桥接模式是将复杂变化的多个维度分开,通过组合的形式进行联系。

举个例子,现在我们要写一个绘图设备(类),它可以画不同颜色不同形状的图形:



先想一个简单的实现,我们的设备拥有绘制所有这些图形的接口:



我们可以发现这么做的话我们的设备的接口会变得非常之多,难以维护和管理,接口内也会出现许多重复代码,增加编程负担,所以这里使用桥接模式。

按照桥接模式的两种说法,我们可以这样理解:

1. DrawDevice的绘制接口所做的事是用‘颜色’绘制‘形状’,那么将‘颜色’和‘形状’这两个抽象部分独立出来。

2. 我们的绘制结果是是由‘颜色’和‘形状’这两个维度决定的,那么把这两个维度分离,让其单独进行变化。

可以看出来虽然说法不同但表达的含义是相同的,那么我们独立出‘颜色’和‘形状’的概念,而设备只提供一个接口。

桥接模式的实现:

//形状类
class Shape
{
public:
virtual void readShape(){};
};

class Triangle : public Shape
{
public:
void readShape()
{
cout << "Triangle";
}
};

class Square : public Shape
{
public:
void readShape()
{
cout << "Square";
}
};

class Circular : public Shape
{
public:
void readShape()
{
cout << "Circular";
}
};

//颜色类
class Color
{
public:
virtual void readColor(){};
};

class Red : public Color
{
public:
void readColor()
{
cout << "Red ";
}
};

class Yellow : public Color
{
public:
void readColor()
{
cout << "Yellow ";
}
};

class Blue : public Color
{
public:
void readColor()
{
cout << "Blue ";
}
};

class DrawDevice
{
public:
void draw(Color *color,Shape *shape)
{
cout << "draw ";
color->readColor();
shape->readShape();
}
};

int main()
{
DrawDevice device;

Shape *shape = new Triangle;
Color *color = new Red;
device.draw(color,shape);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  桥接模式