桥接模式(Bridge)

1.意图

抽象与实现相分离,使之相互独立,任何一方扩展都不会影响到另外一方,适用于抽象不希望跟实现有个固定绑定关系。

2.模式类型

桥接模式是结构性对象设计模式

3.UML

4.优缺点

优点:

提高了系统的可扩展性。比如,抽象部分和实现部分可以独立扩展,修改其中一个不会影响另一个。同时,符合开闭原则,因为新增抽象或实现都不需要修改现有代码。另外,桥接模式可以替代多层继承结构,因为继承可能会导致类爆炸,而桥接模式通过组合代替继承,更灵活。

缺点:

1.设计复杂度增加,需要准确识别系统中独立变化的维度,避免继承层次过深。

2.过度设计风险上升,若维度变化不明确,可能引入不必要的复杂性。

5.适用场景

业务场景需要多维度扩展

如上文中的图形渲染案例,抽象渲染器,图形,之后再进行实现,如多种图形和渲染,可以进行运行时切换相关渲染状态。另外如远程设备控制,抽象设备层,实现控制层面等。

6.代码

cpp 复制代码
#include <iostream>
#include <memory> // 用于智能指针

// 实现化接口:Renderer
class Renderer {
public:
    virtual ~Renderer() = default; // 虚析构函数确保正确释放资源
    virtual void renderCircle(float radius) = 0; // 纯虚函数定义接口
};

// 具体实现化:OpenGL 渲染器
class OpenGLRenderer : public Renderer {
public:
    void renderCircle(float radius) override {
        std::cout << "OpenGL渲染圆形,半径:" << radius << std::endl;
    }
};

// 抽象化:图形基类
class Shape {
protected:
    std::shared_ptr<Renderer> renderer; // 通过智能指针持有实现化对象
public:
    Shape(std::shared_ptr<Renderer> renderer) : renderer(renderer) {}
    virtual ~Shape() = default; // 虚析构函数支持多态销毁
    virtual void draw() = 0;    // 纯虚函数定义抽象接口
};

// 扩展抽象化:圆形
class Circle : public Shape {
    float radius; // 圆形的特有属性
public:
    Circle(std::shared_ptr<Renderer> renderer, float radius)
        : Shape(renderer), radius(radius) {}
    
    void draw() override {
        renderer->renderCircle(radius); // 调用实现化接口的方法
    }
};

// 使用示例
int main() {
    // 创建具体实现化对象(OpenGL 渲染器)
    auto openglRenderer = std::make_shared<OpenGLRenderer>();
    
    // 创建扩展抽象化对象(圆形),并关联实现化对象
    Circle circle(openglRenderer, 5.0f);
    
    // 调用接口绘制图形
    circle.draw();

    return 0;
}

以上就是桥接模式的笔记,欢迎随时交流!!!

相关推荐
具***714 小时前
台达AS系列PLC modbus TCP网口上位机通信,项目现场使用设备的C#源代码
桥接模式
询问QQ688238861 天前
锂电池主动均衡仿真:基于电压的变压器型均衡电路探索
桥接模式
__万波__2 天前
二十三种设计模式(七)--桥接模式
设计模式·桥接模式
牛奶咖啡134 天前
解决配置虚拟网络后同网段的设备网络不通问题
网络·桥接模式·主机模式·配置虚拟网络后同网段设备不通·排查解决同网段同网关网络不通·重置windows主机网络·nas模式
雨中飘荡的记忆5 天前
设计模式之桥接模式详解
设计模式·桥接模式
ZHE|张恒16 天前
设计模式(七)桥接模式 — 抽象与实现分离,让维度独立扩展
设计模式·桥接模式
乙己4071 个月前
设计模式——桥接模式(bridge)
设计模式·桥接模式
黑屋里的马1 个月前
java的设计模式之桥接模式(Bridge)
java·算法·桥接模式
Yeniden1 个月前
【设计模式】桥接模式大白话讲解
设计模式·桥接模式
数据知道1 个月前
Go语言设计模式:桥接模式详解
设计模式·golang·桥接模式