设计模式结构型——桥接模式
目录什么是桥接模式桥接模式的实现桥接模式角色桥接模式类图桥接模式举例桥接模式代码实现桥接模式的特点优点缺点使用场景注意事项什么是桥接模式桥接Bridge模式是用于把抽象化与实现化解耦使得二者可以独立变化。把抽象(abstraction)与行为实现(implementation)分离开来从而可以保持各部分的独立性以及应对它们的功能扩展。其归属于结构型模式它通过提供抽象化和实现化之间的桥接结构来实现二者的解耦。说⽩了核⼼实现也就是在A类中含有B类接口通过构造函数传递B类的实现这个B类就是设计的桥 。桥接模式涉及到一个作为桥接的接口使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。举例说明现需要提供大中小3种型号的画笔能够绘制5种不同颜色如果使用蜡笔我们需要准备3*515支蜡笔也就是说必须准备15个具体的蜡笔类。而如果使用毛笔的话只需要3种型号的毛笔外加5个颜料盒用358个类就可以实现15支蜡笔的功能。桥接模式的实现桥接模式角色抽象角色(Abstraction)一般为抽象类。该类持有一个实现角色的引用并通过构造方法传入一个具体的实现类。拓展抽象角色(RefinedAbstraction)扩展抽象角色可以对抽象角色的方法进行覆盖重写来达到完善的目的。实现角色(Implementor)定义一个维度的基本操作提供给抽象角色使用该类一般为接口或者抽象类。具体实现角色(ConcreteImplementor)Implementor的具体实现类。桥接模式类图桥接模式举例场景 一个甜品蛋糕店售卖的食品有蛋糕、奶茶和牛奶但是每个商品都有各种口味草莓味、蓝莓味、香蕉味。食品又新增了提拉米苏口味又新增了芒果难道要把商品和口味再全部绑定一套吗显然这种两个维度扩展的情况不适合这种方案。那我们另辟蹊径创建两个父类一个食品类一个水果类。两个父类各自包含了相应的子类然后根据需要将食品和水果进行组合。如下桥接模式代码实现实现角色/** * author Evan Walker 昂焱数据: https://www.ayshuju.com * version 1.0 * desc 水果 * date 2023/07/09 14:08:10 */ public interface Fruit { /** * 被添加 * * param food */ void doAdd(String food); }抽象角色/** * author Evan Walker 昂焱数据: https://www.ayshuju.com * version 1.0 * desc 食物 * date 2023/07/09 14:07:35 */ public abstract class Food { /** * 水果 */ Fruit fruit; public void setFruit(Fruit fruit) { this.fruit fruit; } /** * 制作时添加 */ public abstract void add(); }拓展抽象角色/** * author Evan Walker 昂焱数据: https://www.ayshuju.com * version 1.0 * desc 蛋糕 * date 2023/07/09 14:16:51 */ public class Cake extends Food{ Override public void add() { fruit.doAdd(蛋糕); } } public class Milk extends Food{ Override public void add() { fruit.doAdd(牛奶); } }具体实现角色/** * author Evan Walker 昂焱数据: https://www.ayshuju.com * version 1.0 * desc 香蕉 * date 2023/07/09 14:09:02 */ public class Banana implements Fruit{ Override public void doAdd(String food) { System.out.println(香蕉 food); } } public class Blueberry implements Fruit{ Override public void doAdd(String food) { System.out.println(蓝莓food); } } public class Strawberry implements Fruit { Override public void doAdd(String food) { System.out.println(草莓 food); } }测试类/** * author Evan Walker 昂焱数据: https://www.ayshuju.com * version 1.0 * desc 测试类 * date 2023/07/09 14:21:58 */ public class Test { public static void main(String[] args) { //蛋糕 Fruit blueberry new Blueberry(); Food cake new Cake(); cake.setFruit(blueberry); cake.add(); //牛奶 Food milk new Milk(); milk.setFruit(blueberry); milk.add(); } }测试结果桥接模式的特点优点分离了抽象部分及其实现部分两个维度实现了代码的解耦提高了系统的扩展性。扩展功能时只需要新增类在两个变化维度中任意扩展一个维度都不需要修改原有的系统符合开闭原则。通过组合而不是继承来实现耦合符合组合复用原则。桥接模式可替代多层继承方案可以减少子类的个数降低系统的管理和维护成本。缺点增加了系统的理解难度和设计难度由于聚合关联关系建立在抽象层需针对抽象进行设计与编程。需要正确识别系统中各个独立变化的维度。使用场景当存在两个独立变化的维度而这两个维度都需要进行扩展时当不希望使用继承或因为多层次继承导致系统类的个数急剧增加时当需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时避免在两个层次之间建立静态的继承联系注意事项对于两个独立变化的维度强烈推荐使用桥接模式要求正确识别出系统中两个独立变化的维度因此其使用范围有一定的局限性。对于系统的高层部分只需要知道抽象部分和实现部分的接口就可以了其他的部分由具体业务来完成。桥接模式的实现形式来看满⾜了单⼀职责和开闭原则实现了抽象和实现部分的分离提供了系统的灵活性让抽象部分和实现部分相互独立让每⼀部分内容都很清晰易于维护和拓展但若实现的⾼内聚的代码那么就会很复杂。所以在选择构建代码的时候需要考虑好整体的设计否则选不到合理的设计模式将会让代码变得难以开发。桥接模式是通过组合替代继承来实现的。在开发中需要解耦解耦的实质就是减少对象之间的关联。继承是一种强关联一旦通过继承那么子类就会拥有父类所有公开的方法和属性导致有些子类得到了不需要的方法和属性而组合就不一样组合是一种弱关联我只是持有一个对象但持有对象所拥有的功能并不是我的和我并没有很强烈的关系。所以在很多场景都可通过组合来解耦继承对象之间的强关联关系。希望大家记住编程中的一条原则多用组合少用继承。

相关新闻

KMS_VL_ALL_AIO 本地KMS快速激活指南:从零到一,一个批处理搞定 Windows 和 Office 激活

KMS_VL_ALL_AIO 本地KMS快速激活指南:从零到一,一个批处理搞定 Windows 和 Office 激活

KMS_VL_ALL_AIO 本地KMS快速激活指南:从零到一,一个批处理搞定 Windows 和 Office 激活 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 重装系统后"未激活"的水…

2026/8/22 16:14:32 阅读更多 →
sql中根据父节点获取所有的子节点语句

sql中根据父节点获取所有的子节点语句

WITH sub_nodes(pk_id) AS (SELECT pk_id FROM IBP_T_Regions WHERE iparentid 56UNION ALLSELECT tn.pk_id FROM IBP_T_Regions tnJOIN IBP_T_Regions s ON tn.iparentid s.pk_id ) SELECT * FROM sub_nodes;如果修改指定父节点所有子节点的部门id值如下:WITH su…

2026/8/22 16:14:32 阅读更多 →
设计模式创建型——原型模式

设计模式创建型——原型模式

目录 什么是原型模式 原型模式的实现 原型模式分类 浅克隆和深克隆的区别 原型模式浅克隆 原型模式深克隆 原型模式简单实现方式 原型模式登记实现方式 原型模式的特点 特点 优点 缺点 应用场景 什么是原型模式 原型模式(Prototype Pattern&#xff09…

2026/8/22 16:14:32 阅读更多 →

最新新闻

摄像头AirPods技术解析:从空间计算到隐私保护的工程实践

摄像头AirPods技术解析:从空间计算到隐私保护的工程实践

最近关于苹果可能推出带摄像头的 AirPods 的传闻,在科技圈和社交媒体上引发了不小的讨论。很多朋友的第一反应是担忧隐私问题,担心这种“无孔不入”的摄像头会成为新的“偷拍”工具。作为一名长期关注技术实现和工程伦理的开发者,我认为这种担…

2026/8/22 19:03:35 阅读更多 →
开源维护者如何高效使用Codex:从环境配置到工作流集成

开源维护者如何高效使用Codex:从环境配置到工作流集成

1. 先搞清楚 Codex 是什么,以及它到底解决了什么问题如果你在开源社区活跃,或者经常需要处理代码生成、代码补全这类任务,最近可能听过Codex这个名字。简单来说,Codex 是一个专注于代码理解和生成的 AI 模型,它能把自然…

2026/8/22 19:03:35 阅读更多 →
自动化测试实战:从Python基础到pytest框架与工程化实践

自动化测试实战:从Python基础到pytest框架与工程化实践

你是不是也遇到过这样的困境:想学自动化测试,网上资料铺天盖地,Python、Selenium、pytest、接口测试……每个词都听过,但就是不知道从哪里开始,怎么把它们串起来。跟着零散的教程学了半天,要么环境配不通&a…

2026/8/22 19:03:35 阅读更多 →
高德云图WebGIS开发面试12大技术要点解析

高德云图WebGIS开发面试12大技术要点解析

1. 高德云图WebGIS技术面试核心要点解析作为国内领先的数字地图服务商,高德在WebGIS领域的技术积累一直备受业界关注。最近帮团队面试了几位WebGIS方向的候选人,发现很多开发者对高德云图的技术栈理解存在偏差。这里整理出实际面试中高频出现的12个技术问…

2026/8/22 19:03:35 阅读更多 →
从信息仓库到决策引擎:多智能体知识库的审议式策展协议

从信息仓库到决策引擎:多智能体知识库的审议式策展协议

1. 从“信息仓库”到“决策引擎”:为什么我们需要“审议式策展”? 在AI Agent(智能体)应用遍地开花的今天,我们构建的“知识库”正面临一个尴尬的境地。传统的知识库,无论是基于向量检索的RAG系统&#xff…

2026/8/22 19:03:35 阅读更多 →
AI简历优化工具:关键技术解析与2026求职市场应用

AI简历优化工具:关键技术解析与2026求职市场应用

1. 项目概述:AI简历关键词优化工具的核心价值2026年的求职市场正在经历一场由AI驱动的革命性变革。作为从业十年的HR技术顾问,我亲眼见证了传统简历投递方式如何被智能工具彻底改变。当前市场上最先进的AI简历优化系统已经能够实现:实时分析招…

2026/8/22 19:02:35 阅读更多 →

日新闻

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

2026/8/22 0:00:11 阅读更多 →
电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

这次我们来看一个针对电气考研电路科目的学习规划项目。它不是软件工具,而是一套聚焦于8月份关键节点的备考策略。对于电气工程考研的同学来说,电路分析是专业课的重中之重,也是拉开分差的关键。进入8月,复习进入强化阶段&#xf…

2026/8/22 0:00:11 阅读更多 →
消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

大家好,我是专注于前端开发与AI工具实践的技术博主。在日常使用 Claude Code 等AI编程助手时,你是否也遇到过这样的困扰:生成的代码功能上没问题,但代码风格、组件设计、交互逻辑总透着一股“AI味”——布局单调、样式简陋、交互生…

2026/8/22 0:00:11 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/22 8:09:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/22 18:08:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/22 7:31:03 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →