桥接模式(Bridge)

Bridge Pattern 桥接模式 有时候一个类,可能会拥有多个变化维度。比如奶茶可以选择容量大小、口味风味。容易想到的实现方案是通过继承实现各种组合,但是这样会很容易造成类爆炸。那么有没有什么良策呢?答案就是 Bridge Pattern 桥接模式,其是结构性模式的一种,本文就让我们来了解下该模式 设计模式 模式思想 这里,我们需要构建一个汽车类,我们知道汽车有很多品牌,比如宝马BMW、奔驰Benz。与此同时,汽车的颜色又是五颜六色的,常见的有红、绿、蓝。可以看到在这里对于汽车而言,其存在两个维度——品牌、颜色 阅读详情

在讲桥接模式之前,先问一个问题:

如果一个类有两个变化维度,你会怎么设计?

很多人第一反应是 —— 继承。

但当继承层级开始“爆炸”时,桥接模式就该登场了。


一、桥接模式解决什么问题?

一句话:

将抽象部分与实现部分分离,使它们可以独立变化。

关键词:

  • 抽象(Abstraction)
  • 实现(Implementation)
  • 解耦
  • 组合替代继承

二、一个典型的继承爆炸问题

假设我们要设计一个“消息通知系统”。

消息类型有:

  • 普通消息
  • 紧急消息

发送渠道有:

  • 邮件
  • 短信
  • 微信

很多人会这样写:

class EmailNormalMessage:
    pass

class EmailUrgentMessage:
    pass

class SMSNormalMessage:
    pass

class SMSUrgentMessage:
    pass

class WechatNormalMessage:
    pass

class WechatUrgentMessage:
    pass

问题来了:

如果再加一个“企业钉钉”渠道?

类数量继续翻倍。

这叫:

维度交叉导致类爆炸。


三、桥接模式的核心思想

不要让两个维度用继承耦合在一起。

而是:

  • 一个维度负责“抽象”
  • 一个维度负责“实现”
  • 两者通过组合连接

结构是这样的:

Abstraction  --->  Implementor

不是继承,而是“桥接”。


四、使用桥接模式重构示例

第一步:定义“实现部分”

class MessageSender:
    def send(self, content):
        raise NotImplementedError

具体实现:

class EmailSender(MessageSender):
    def send(self, content):
        print(f"发送邮件: {content}")

class SMSSender(MessageSender):
    def send(self, content):
        print(f"发送短信: {content}")

class WechatSender(MessageSender):
    def send(self, content):
        print(f"发送微信: {content}")

第二步:定义“抽象部分”

class Message:
    def __init__(self, sender: MessageSender):
        self.sender = sender

    def send(self, content):
        self.sender.send(content)

第三步:扩展抽象维度

class UrgentMessage(Message):
    def send(self, content):
        content = "[紧急] " + content
        self.sender.send(content)

使用方式

email_sender = EmailSender()
sms_sender = SMSSender()

normal_msg = Message(email_sender)
normal_msg.send("系统通知")

urgent_msg = UrgentMessage(sms_sender)
urgent_msg.send("服务器故障")

现在:

  • 新增渠道? → 新增 Sender 类
  • 新增消息类型? → 新增 Message 子类

两条维度完全独立。


五、桥接模式的本质

桥接模式的真正核心是:

用组合替代多维继承。

它解决的是:

  • 类数量指数级增长
  • 继承层级过深
  • 不易扩展

六、桥接 vs 策略模式

很多人会混淆。

表面结构很像。

区别在于:

对比点桥接模式策略模式
关注点多维变化解耦算法可替换
是否强调抽象层次是否
是否解决继承爆炸是否

一句话区分:

策略是“换算法”,
桥接是“拆维度”。


七、桥接模式在真实项目中的应用

非常常见于:

  • UI 框架(不同平台渲染)
  • 消息系统(类型 × 渠道)
  • 支付系统(支付方式 × 支付渠道)
  • 报表系统(报表类型 × 输出格式)

例如:

  • 报表类型:财务、库存
  • 输出格式:PDF、Excel、HTML

如果不用桥接,类会非常多。


八、什么时候不要用桥接?

不要为了“设计模式而设计模式”。

如果:

  • 只有一个维度
  • 或两个维度都不会扩展

桥接只会增加复杂度。

经验原则:

维度稳定时,用简单设计;
维度会扩展时,用桥接。


九、桥接模式优缺点

✅ 优点

  • 避免类爆炸
  • 提高扩展性
  • 符合开闭原则
  • 结构更清晰

❌ 缺点

  • 增加系统抽象层
  • 初期理解成本高
  • 设计不当会变复杂

十、一句话总结

桥接模式的核心是“拆维度”。

当你发现:

  • 类数量呈乘法增长
  • 继承结构越来越难维护

就应该考虑:

用组合建立一座“桥”。


【设计模式】——桥接模式(Bridge Pattern) 桥接模式也称为桥梁模式、接口模式或柄体模式,它将抽象部分与它的具体实现部分分离,使它们都可以独立地变化。这种分离方式类似于将一座桥分为桥面(抽象部分)和桥墩(实现部分),两者可以独立设计和变化,互不影响。 阅读详情

相关推荐

关于对鱼眼相机图片进行畸变校正的两种思路

鱼眼畸变主要表现为径向畸变(Radial Distortion),图像中心正常,边缘向外拉伸。畸变模型通常基于入射角θ\thetaθ(光线与光学轴夹角)和图像半径rrr的关系。等距投影(Equidistant Projection)rdfθrd​fθ,其中rdr_drd​为畸变图像半径,fff为焦距,θ\thetaθ为入射角。等立体角投影(Equisolid Angle Projection)rd2fsin⁡θ2rd​2fsinθ/2。

qq_45670407的博客 1538

桥接模式 Bridge Pattern

的理解出了问题。

DachuiLi的博客 1070

计算机毕业设计springboot股票模拟交易系统的设计与实现u6m959【附源码+数据库+部署+LW】

选题背景: 随着互联网和金融科技的快速发展,股票市场成为了吸引人们关注和参与的重要领域之一。越来越多的人开始对股票投资感兴趣,希望通过交易股票来获取收益。然而,对于初学者来说,股票市场的复杂性和风险往往让他们望而却步。因此,设计和实现一个股票模拟交易系统,可以帮助初学者更好地理解和掌握股票交易的规则和技巧,提高他们的投资决策能力。 意义: 股票模拟交易系统的设计与实现具有以下几个重要意义: 提供实践机会:股票模拟交易系统为投资者提供了一个实践的平台,使他们能够在真实市场环境下进行模拟交易,了解股票市场的

gp12081的博客 1755

C++ 桥接模式 (Bridge Pattern)

flyfish

二分掌柜的 1692

Windows BITS服务:后台智能文件传输技术详解

后台文件传输技术是现代IT基础设施中的关键组件,Windows BITS(Background Intelligent Transfer Service)作为微软原生解决方案,通过队列管理和智能调度实现高效数据传输。其核心技术原理包括分块传输、断点续传和带宽自适应,能够根据网络状况动态调整传输速率(默认占用空闲带宽的80%)。在工程实践中,BITS特别适用于企业软件分发和自动化数据采集场景,通过PowerShell命令即可实现高优先级传输和代理配置。相比传统FTP方案,BITS在跨国文件传输中将失败率从30

weixin_42116058的博客 269

Cisco Packet Tracert 无线路由器配置

Cisco Packet Tracert 无线路由器配置

yushan_caoyu的博客 2万+

桥接模式(Bridge Pattern)

桥接模式将抽象部分与实现部分分离,让它们都可以独立地变化。这种模式在软件设计中非常有用,特别是在处理具有两个或多个独立变化维度的类型时。通过桥接模式,我们可以将这些类型分解成多个较小的类,这些类可以更容易地进行扩展和维护。

猪猪 532

FPGA实现PID算法

PID 控制器表达式如下(引用某硕士论文 《基于FPGA的PID控制器研究与实现》): 其中,Kp为比例增益,Ti为积分时间常数,Td为微分时间常数,u(t)为控制量,e(t)为偏差。 在数字控制系统中,PID控制规律的实现必须用数值逼近的方法。当采样周期相当短时,用求和代替积分、用后向差分代替微分,使模拟PID离散化变为差分方程。 本文使用并行结构来实现。具有延时小,计算速度快的特点,但需要资源比较多。 利用图3.2所示并行结构实现方法 ,进一步将3.8式分解: ...

nxin168的博客 1万+

桥接模式Bridge Pattern

使它们都可以独立地变化对象结构型模式。

Resurgence03的博客 911

YOLO项目部署:从Python脚本到Docker容器的企业级交付全流程

YOLO模型企业级Docker部署方案 核心挑战 环境一致性:解决"本地能跑,服务器崩掉"问题 可扩展性:支持单实例到多实例扩展 稳定性:确保99.9%可用性 部署流程 项目改造:模块化代码,分离配置 Docker镜像:支持CPU/GPU环境 API服务:封装推理逻辑 监控告警:实现自动化运维 技术方案 需求 解决方案 环境一致性 Docker镜像+依赖冻结 可扩展性 K8s+负载均衡 稳定性 健康检查+自动重启 项目结构 模块化代码组织 外部化配置管理 精确依赖版本控制 摘要重点:通过

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1224

Linux 设置双网卡通信,外网网卡和内网网卡

背景,Linux 主机已经安装了内网、外网 2 张网卡,目前外网网络已通,需要设置内网网卡转发通内网 内网需要通信的设备的网段,如果 10.99.0.0 代表 10.99 网段的所有 IP 表示 10.xx 网段走 10.xx.xx.xx 这个网关转发 :内网网卡设备示例 2、设置启动自动生效 打开 文件,如果没有则创建该文件,然后在文件内写入如下的内容修改上面的语句 为 即可 示例...

简简单单Onlinezuozuo 6588

23种设计模式——桥接模式 (Bridge Pattern)详解

本文介绍了23种经典设计模式之——桥接模式(Bridge Pattern)的使用及说明

Meteors.的博客 1216

Davinci配置临界区Exclusive Area

在Exclusive Area专属区域内的代码段执行不会被中断,可以用于保护多个Runnable间的共享资源。Exclusive Area会对RTE的调度策略和配置进行约束。如果两个或多个Runnable指向同一个Exclusive Area,那么只有其中一个Runnable被允许在该Exclusive Area内执行。即这些Runnable在ExlcusiveArea内执行时不能并发运行(相互抢占)。:在完整执行期间,整个runnable都在临界区运行。:执行期间可以进入临界区。

qq_42851449的博客 492

桥接模式(Bridge Pattern)

将抽象与其实现分离,以便二者可以独立变化。more通过使用桥接模式,可以更好地管理类之间的关系,提高系统的灵活性和可维护性,同时也有利于解决类爆炸的问题。

jaune162的专栏,最新动态请关注:https://jaune162.blog 1409

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java 桥接模式(Bridge Pattern)

桥接模式通过引入一个中间层的桥接接口(或抽象类),将原本的抽象部分与其实现部分分开。这样,抽象层与实现层的扩展不再相互影响,从而降低系统的复杂性并提高可扩展性。

qq_35082497的博客 967

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

设计模式-桥接模式-bridge pattern

桥接模式(Bridge Pattern)是一种结构性设计模式,用于将抽象部分与其实现部分分离,使它们可以独立地变化。这种模式通过定义一个桥接接口,将实现的类和抽象的类解耦,从而能够独立地扩展抽象类和实现类。抽象(Abstraction):扩展抽象(Refined Abstraction):实现化(Implementor):具体实现化(Concrete Implementor):首先,定义实现化接口: 接着,创建具体的实现化类: 然后,定义抽象类: 接着,扩展抽象类: 最后,客户端代码使用桥接模式: 1.3.

wesigj的博客 2818

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

桥接模式(Bridge Pattern)-(最通俗易懂的案例)

1.定义 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。 问题: 这里的抽象与实现是什么意思呢?先来看一个例子: 假如你有一个几何形状Shape类,从它能扩展出两个子类: ​ 圆形Circle和 方形Square 。 你希望对这样的类层次结构进行扩展以使其包含颜色,所以你打算创建名为红色Red和蓝色Blue的形状子类。 但是, 由于你已有两个子类,...

世银的博客 3万+

设计模式之桥接模式(Bridge Pattern)

文章目录一、桥接模式定义1.1、桥接模式产生的背景1.2、桥接模式的定义二、桥接模式的UML三、代码3.1、Brand3.2、Vivo 、XiaoMi3.3、手机 Phone3.4、FoldedPhone 折叠式手机类3.5、UpRightPhone 直板手机3.3、测试 一、桥接模式定义 1.1、桥接模式产生的背景 以手机为例,对不同手机类型的、不同品牌实现操作编程(比如:开机、关机、上网,打电...

猎人在吃肉 870

JAVA设计模式之 桥接模式【Bridge Pattern】

一、概述 将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式。二、适用场景 处理多维度变化。 业务场景:某功能为将数据库中的数据转换成多种文件格式,例如txt、xml、pdf等格式,同时需要支持多种不同类型的数据库的读取。便可使用桥接模式对其进行设计。 这里的维度有两个 分别为:不同的文件格式

小吕丶Code阶区 5240
上一篇: Claude Code 的基本使用流程详解
下一篇: 如何用 Claude Code 阅读和理解陌生代码
sg_knight
sg_knight 新星创作者: Java技术领域 新星创作者: Java技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄19年 2万+粉丝 572原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sg_knight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值