桥接模式属于结构型模式
基本原理:链接两个不同的独立变化的维度。将实现类与抽象类变成两个独立的维度。
主要流程:
1.创建一个维度A
2.创建另一个维度B,并让之前的维度A成为本维度B的一个成员
3.在使用时创建维度B,并对维度B的成员维度A进行赋值
注意:抽象类依赖实现类
#include <iostream>
#include <string>
using namespace std;
//创建实现类
class DrawApi
{
public:
virtual void drawCircle(int radius, int x, int y) = 0;
};
class RedCircle:public DrawApi
{
public:
void drawCircle(int radius, int x, int y)
{
cout<<"Drawing Circle[ color: red, radius:"<< radius <<", x:" <<x<<", y:"<< y <<"]"<<endl;
}
};
class GreenCircle:public DrawApi
{
public:
void drawCircle(int radius, int x, int y)
{
cout<<"Drawing Circle[ color: red, radius:"<< radius <<", x:" <<x<<", y:"<< y <<"]"<<endl;
}
};
//创建抽象类
class Shape
{
protected:
DrawApi *drawApi;
Shape(DrawApi *drawApi)
{
this->drawApi = drawApi;
}
public:
virtual void draw() = 0;
};
class Circle:public Shape
{
private:
int x,y,radius;
public:
Circle(int radius, int x, int y, DrawApi *drawApi):Shape(drawApi)
{
this->x = x;
this->y = y;
this->radius = radius;
}
void draw()
{
//抽象类依靠实现类
drawApi->drawCircle(radius,x,y);
}
};
int main()
{
Shape * redCircle = new Circle(150,50,50,new RedCircle());
Shape * greenCircle = new Circle(200,60,60,new GreenCircle());
redCircle->draw();
greenCircle->draw();
return 0;
}