当前位置: 首页 > news >正文

桥接模式(Bridge)

1.意图

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

2.模式类型

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

3.UML

                        

4.优缺点

优点:

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

缺点:

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

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

5.适用场景

        业务场景需要多维度扩展

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

6.代码

#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;
}

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

http://www.xdnf.cn/news/318493.html

相关文章:

  • 从 “机器人 +“ 到 “+ 机器人“:算力政策撬动的产业生态革命
  • 针对Mkdocs部署到Githubpages加速访问速度的一些心得
  • Flutter TabBar / TabBarView 详解
  • 蓝桥杯青少 图形化编程——“星星”点灯
  • hadoop中的序列化和反序列化(2)
  • 软件开发各阶段的自动化测试技术详解
  • 好的软件系统
  • 3、Kafka 核心架构拆解和总结
  • 线程池技术
  • mongodb 学习笔记
  • Java泛型
  • PyTorch 中如何针对 GPU 和 TPU 使用不同的处理方式
  • CPU的基本认识
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】7.2 PostgreSQL与Python数据交互(psycopg2库使用)
  • 解决HomeAssistant 无法安装 samba share问题
  • C++ set和map系列(关联式容器)的介绍及使用
  • 如何有效防御服务器DDoS攻击
  • GoFly企业版框架升级2.6.6版本说明(框架在2025-05-06发布了)
  • 【macOS】iTerm2介绍
  • 21. LangChain金融领域:合同审查与风险预警自动化
  • 直线最小二乘法线性拟合-- points点集合
  • 【JS逆向基础】并发爬虫
  • 01Introduction
  • Flowable7.x学习笔记(二十一)查看我的发起
  • uniapp 搭配 uCharts
  • 禁止idea联网自动更新通过防火墙方式
  • 2025-05-07 学习记录--Python-变量 + 常量 + 命名规则 + 变量的数据类型 + 数据类型
  • boost笔记: Cannot open include file: ‘boost/mpl/aux_/preprocessed/plain/.hpp‘
  • Decode rpc invocation failed: null -> DecodeableRpcInvocation
  • Notion Windows桌面端快捷键详解