桥接模式
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。
使用场景:
1、如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。
2、对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。
3、一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。
我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法。其中,可以使用相同的抽象类方法但是不同的桥接实现类,来画出不同颜色的图形。
#ifndef _BRIDGE_H_
#define _BRIDGE_H_
#include<iostream>
class XColor
{
public:
virtual void draw() = 0;
};
class Red: public XColor
{
public:
void draw() override
{
std::cout<< " draw red"<< std::endl;
}
};
class Green : public XColor
{
public:
void draw() override
{
std::cout << " draw green" << std::endl;
}
};
class XShap
{
public:
XShap(XColor* pColor):color(pColor) {}
virtual void drawColor() =0;
protected:
XColor* color;
};
class Rectangle: public XShap
{
public:
Rectangle( XColor *pColor ):XShap(pColor) {};
void drawColor() override
{
std::cout << "rectangle:";
color->draw();
}
};
class Circle: public XShap
{
public:
Circle( XColor *pColor ):XShap(pColor) {};
void drawColor() override
{
std::cout << "circle:";
color->draw();
}
};
#endif
int main()
{
XColor* red = new Red();
XColor* green = new Green();
XShap* rectangle= new Rectangle(red);
rectangle->drawColor();
XShap* circle = new Circle(green);
circle->drawColor();
return 0;
}