模式特点
将抽象部分与它的实现部分分离,使它们都可以独立地变化。桥接模式通过组合而非继承来连接两个独立变化的维度。
- 分离抽象与实现,各自独立扩展
- 避免多维度继承导致的类爆炸问题
- 运行时可以切换实现部分
类图
应用场景
- Qt 中 QPainter + QPaintDevice:绘制逻辑与设备分离
- 跨平台渲染引擎:抽象渲染接口 + OpenGL/DirectX/Vulkan 实现
- 消息通知系统:通知方式(邮件/短信/推送)× 消息类型
- UI 控件与主题样式分离
示例代码(C++)
// 实现者接口 - 渲染器 class Renderer { public: virtual void renderCircle(double x, double y, double r) = 0; virtual ~Renderer() = default; }; class OpenGLRenderer : public Renderer { public: void renderCircle(double x, double y, double r) override { std::cout << "OpenGL: 圆形(" << x << "," << y << "," << r << ")" << std::endl; }}; class DirectXRenderer : public Renderer { public: void renderCircle(double x, double y, double r) override { std::cout << "DirectX: 圆形(" << x << "," << y << "," << r << ")" << std::endl; }}; // 抽象 - 图形 class Shape { protected: Renderer* m_renderer; public: Shape(Renderer* r) : m_renderer(r) {} virtual void draw() = 0; virtual ~Shape() = default; }; class Circle : public Shape { double x, y, radius; public: Circle(Renderer* r, double x, double y, double rad) : Shape(r), x(x), y(y), radius(rad) {} void draw() override { m_renderer->renderCircle(x, y, radius); } };