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

97、23种设计模式之桥接模式(6/23)

桥接模式(Bridge Pattern) 是 GoF 提出的 23 种经典设计模式中的一种结构型模式,其核心思想是将抽象部分与实现部分分离,使它们可以独立变化,从而提升系统的灵活性和可扩展性。以下是桥接模式的详细解析:

一、模式定义

桥接模式通过组合关系替代传统的继承关系,将类的抽象化(Abstraction)与实现化(Implementor)解耦,使得两者可以独立扩展而互不影响。

  • 抽象化(Abstraction):定义高层业务逻辑的接口,持有实现化对象的引用。
  • 实现化(Implementor):定义具体实现类的接口,不直接与抽象化关联。

例如,在跨平台图形绘制系统中:

  • 抽象化:Shape(如圆形、矩形)定义绘制方法。
  • 实现化:Renderer(如光栅渲染、矢量渲染)定义具体渲染逻辑。
  • 组合关系:Shape 通过聚合 Renderer 实现动态切换渲染方式。

二、适用场景

1.多维度独立变化

当系统存在两个或多个独立变化的维度(如平台与格式、形状与颜色),且需独立扩展时。
示例:

  • 跨平台视频播放器:支持 Windows/Linux/macOS 等平台,同时支持 AVI/MP4/RMVB 等格式。
  • 图形绘制系统:支持圆形/矩形等形状,同时支持光栅/矢量等渲染方式。

2.避免继承层次爆炸

若使用继承实现多维度变化,会导致子类数量指数级增长(如 WindowsAVIPlayer、LinuxMP4Player 等)。桥接模式通过组合减少类数量。

3.需要动态切换实现

在运行时动态组合抽象与实现(如根据用户配置切换渲染方式)。

三、模式结构

桥接模式包含四个核心角色:

1.抽象化(Abstraction)

  • 定义高层接口,持有实现化对象的引用。
  • 示例:Shape 类提供 draw() 方法,内部调用 Renderer 的渲染逻辑。

2.修正抽象化(Refined Abstraction)

  • 扩展抽象化接口,实现具体业务逻辑。
  • 示例:Circle 和 Rectangle 类继承 Shape,定义具体形状的绘制。

3.实现化(Implementor)

  • 定义实现化接口,不涉及抽象化业务。
  • 示例:Renderer 接口定义 renderShape() 方法。

4.具体实现化(Concrete Implementor)

  • 实现实现化接口,提供具体逻辑。
  • 示例:RasterRenderer(光栅渲染)和 VectorRenderer(矢量渲染)实现 Renderer 接口。

四、代码示例(C#)

using System;// 实现化接口(Implementor)
interface IRenderer
{void RenderShape(string shapeName);
}// 具体实现化(Concrete Implementor)
class RasterRenderer : IRenderer
{public void RenderShape(string shapeName){Console.WriteLine($"光栅渲染绘制: {shapeName}");}
}class VectorRenderer : IRenderer
{public void RenderShape(string shapeName){Console.WriteLine($"矢量渲染绘制: {shapeName}");}
}// 抽象化(Abstraction)
abstract class Shape
{protected IRenderer _renderer;public Shape(IRenderer renderer){_renderer = renderer;}public abstract void Draw();
}// 修正抽象化(Refined Abstraction)
class Circle : Shape
{public Circle(IRenderer renderer) : base(renderer) { }public override void Draw(){_renderer.RenderShape("圆形");}
}class Rectangle : Shape
{public Rectangle(IRenderer renderer) : base(renderer) { }public override void Draw(){_renderer.RenderShape("矩形");}
}// 客户端代码
class Program
{static void Main(string[] args){IRenderer raster = new RasterRenderer();IRenderer vector = new VectorRenderer();Shape circle = new Circle(vector);Shape rectangle = new Rectangle(raster);circle.Draw();      // 输出: 矢量渲染绘制: 圆形rectangle.Draw();   // 输出: 光栅渲染绘制: 矩形}
}

关键点说明

1.接口与实现分离

  • IRenderer 是实现化接口,定义渲染逻辑。

  • RasterRenderer 和 VectorRenderer 是具体实现,分别处理光栅和矢量渲染。

2.抽象与组合

  • Shape 是抽象类,通过构造函数注入 IRenderer 实例(组合关系)。
  • Circle 和 Rectangle 是具体抽象化类,调用注入的 IRenderer 实现绘制。

3.动态切换实现

  • 客户端通过传入不同的 IRenderer 实例(如 vector 或 raster),动态切换渲染方式,无需修改 Shape 子类。

五、优缺点分析

1.优点

  • 解耦抽象与实现,提升灵活性

  • 符合开闭原则,扩展无需修改现有代码

  • 避免继承层次爆炸,减少子类数量

2.缺点

  • 增加设计复杂度,需正确识别独立维度
  • 聚合关系需管理,增加类间关联
  • 对初学者不直观,需理解组合优于继承

六、实际应用案例

1.JDBC 驱动

JDBC 通过 DriverManager(抽象化)桥接不同数据库驱动(实现化),如 MySQL、Oracle 等。

2.AWT/Swing 图形库

将组件抽象(如 Button)与平台实现(如 Windows/macOS 渲染)解耦。

3.日志系统

日志级别(抽象化)与输出方式(实现化,如文件、控制台)独立组合。

七、与其他模式对比

  • 适配器模式:转换接口以兼容现有类,关注短期兼容性;桥接模式关注长期解耦与独立扩展。

  • 装饰者模式:动态增强功能,保持接口一致;桥接模式解耦两个维度的变化。

  • 抽象工厂模式:创建产品族;桥接模式组合抽象与实现。

八、总结

桥接模式通过解耦抽象与实现,为多维度变化的系统提供了优雅的扩展机制。其核心在于识别独立维度,并通过组合关系实现灵活组合。在需要支持跨平台、多格式、动态切换等场景时,桥接模式是提升系统可维护性的关键设计选择。

在这里插入图片描述

http://www.dtcms.com/a/354540.html

相关文章:

  • 鸿蒙Harmony-从零开始构建类似于安卓GreenDao的ORM数据库(四)
  • attention is all u need
  • npm install --global @dcloudio/uni-cli 时安装失败
  • 【lucene】如何评测一款分析器Analyzer
  • CP1-1-用户管理MyUser
  • jQuery 从入门到实践:基础语法、事件与元素操作全解析
  • 通过vs code配置spring boot+maven项目
  • vxetable数据导出
  • GaussDB 数据库架构师修炼(十八) SQL执行引擎-概述
  • 【爬虫】通过模拟鼠标点击和键盘操作抓取网页数据
  • 算法 --- 二分
  • 【深度学习新浪潮】显著性检测最新研究进展(2022-2025)
  • LeetCode 刷题【55. 跳跃游戏】
  • 用 PyTorch 搭建 CNN 实现 MNIST 手写数字识别
  • 如何开发线下陪玩儿小程序
  • 【图像处理基石】DCT在图像处理中的应用及实现
  • natapp 内网穿透
  • 【iOS】Masnory自动布局的简单学习
  • 图算法详解:最短路径、拓扑排序与关键路径
  • 使用 httpsok 工具全面排查网站安全配置
  • Nginx + Certbot配置 HTTPS / SSL 证书(简化版已测试)
  • Android稳定性问题的常见原因是什么
  • JSP程序设计之JSP指令
  • react+vite+ts 组件模板
  • CVPR2025丨VL2Lite:如何将巨型VLM的“知识”精炼后灌入轻量网络?这项蒸馏技术实现了任务专用的极致压缩
  • 传统星型拓扑结构的5G,WiFi无线通信网络与替代拓扑结构自组网
  • BGP路由协议(一):基本概念
  • UE的SimpleUDPTCPSocket插件使用
  • 百度地图+vue+flask+爬虫 推荐算法旅游大数据可视化系统Echarts mysql数据库 带沙箱支付+图像识别技术
  • 【数字黑洞2178】2022-10-28