桥接模式
桥接模式用于将抽象部分与实现部分分离,使得它们可以独立地变化。
桥接模式避免了使用继承导致的类爆炸问题,提供更灵活的扩展方式。

#include <bits/stdc++.h>
using namespace std;
// 抽象接口 DrawAPI
class DrawAPI
{
public:
virtual ~DrawAPI() = default;
virtual void drawCircle(int radius, int x, int y) = 0; // 绘制圆的方法
};
// 具体实现类 RedCircle
class RedCircle : public DrawAPI
{
public:
void drawCircle(int radius, int x, int y) override
{
cout << "Drawing Circle[ Color: Red, Radius: " << radius
<< ", X: " << x << ", Y: " << y << "]" << endl;
}
};
// 具体实现类 GreenCircle
class GreenCircle : public DrawAPI
{
public:
void drawCircle(int radius, int x, int y) override
{
cout << "Drawing Circle[ Color: Green, Radius: " << radius
<< ", X: " << x << ", Y: " << y << "]" << endl;
}
};
// 抽象类 Shape
class Shape
{
protected:
unique_ptr<DrawAPI> drawAPI; // 持有一个实现抽象
public:
Shape(unique_ptr<DrawAPI> drawAPI) : drawAPI(move(drawAPI)) {} // 修正构造函数
virtual ~Shape() = default;
virtual void draw() = 0; // 绘制方法的抽象
};
// 具体类 Circle
class Circle : public Shape
{
private:
int x, y, radius;
public:
Circle(int x, int y, int radius, unique_ptr<DrawAPI> drawAPI)
: Shape(move(drawAPI)), x(x), y(y), radius(radius) {} // 修正构造函数
void draw() override
{
drawAPI->drawCircle(radius, x, y); // 委托实现类绘制
}
};
// 桥接模式演示类
class BridgePatternDemo
{
public:
void main()
{
unique_ptr<Shape> redCircle = make_unique<Circle>(100, 100, 10, make_unique<RedCircle>());
unique_ptr<Shape> greenCircle = make_unique<Circle>(100, 100, 10, make_unique<GreenCircle>());
redCircle->draw(); // 绘制红色圆
greenCircle->draw(); // 绘制绿色圆
}
};
// 主函数
int main()
{
BridgePatternDemo demo;
demo.main(); // 执行演示
return 0;
}
:桥接模式&spm=1001.2101.3001.5002&articleId=147174782&d=1&t=3&u=e0a1812a35df4455939c0a852a802acf)
8408

被折叠的 条评论
为什么被折叠?



