登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
【设计模式】如何通过桥接模式解决系统扩展难题? ...
【设计模式】如何通过桥接模式解决系统扩展难题?
[ 复制链接 ]
诉称
2025-6-6 14:50:03
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
概述
现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系:
我们可以发现有很多的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类。
试想,在一个有多种可能会变化的维度的系统中,用继承方式会造成类爆炸,扩展起来不灵活。每次在一个维度上新增一个具体实现都要增加多个子类。为了更加灵活的设计系统,我们此时可以考虑使用桥接模式。
定义:
将抽象与实现分离,使它们可以独立变化。它是用
组合关系代替继承关系
来实现,从而降低了抽象和实现这两个可变维度的耦合度。
结构
桥接(Bridge)模式包含以下主要角色:
抽象化(Abstraction)角色 :定义抽象类,并包含一个对实现化对象的引用。
扩展抽象化(Refined Abstraction)角色 :是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。
实现化(Implementor)角色 :定义实现化角色的接口,供扩展抽象化角色调用。
具体实现化(Concrete Implementor)角色 :给出实现化角色接口的具体实现。
案例
【例】视频播放器
需要开发一个跨平台视频播放器,可以在不同操作系统平台(如Windows、Mac、Linux等)上播放多种格式的视频文件,常见的视频格式包括RMVB、AVI、WMV等。该播放器包含了两个维度,适合使用桥接模式。
类图如下:
代码如下:
//视频文件
public interface VideoFile {
void decode(String fileName);
}
//avi文件
public class AVIFile implements VideoFile {
public void decode(String fileName) {
System.out.println("avi视频文件:"+ fileName);
}
}
//rmvb文件
public class REVBBFile implements VideoFile {
public void decode(String fileName) {
System.out.println("rmvb文件:" + fileName);
}
}
//操作系统版本
public abstract class OperatingSystemVersion {
protected VideoFile videoFile;
public OperatingSystemVersion(VideoFile videoFile) {
this.videoFile = videoFile;
}
public abstract void play(String fileName);
}
//Windows版本
public class Windows extends OperatingSystem {
public Windows(VideoFile videoFile) {
super(videoFile);
}
public void play(String fileName) {
videoFile.decode(fileName);
}
}
//mac版本
public class Mac extends OperatingSystemVersion {
public Mac(VideoFile videoFile) {
super(videoFile);
}
public void play(String fileName) {
videoFile.decode(fileName);
}
}
//测试类
public class Client {
public static void main(String[] args) {
OperatingSystem os = new Windows(new AVIFile());
os.play("战狼3");
}
}
复制代码
好处:
桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。如:如果现在还有一种视频文件类型wmv,我们只需要再定义一个类实现VideoFile接口即可,其他类不需要发生变化。
实现细节对客户透明
使用场景
当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。
当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。
当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时。避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。
往期推荐
《SpringBoot》EasyExcel实现百万数据的导入导出
《SpringBoot》史上最全SpringBoot相关注解介绍
Spring框架IoC核心详解
万字长文带你窥探Spring中所有的扩展点
如何实现一个通用的接口限流、防重、防抖机制
万字长文带你深入Redis底层数据结构
volatile关键字最全原理剖析
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
设计模式
如何
通过
桥接
模式
相关帖子
VonaJS是如何做到文件级别精确HMR(热更新)的?
仅通过一句提示词,就可以让大模型变得更有创造力
“静态回调+上下文指针”模式实现回调机制
Flink源码阅读:如何生成StreamGraph
RabbitMQ发布订阅模式同一消费者多个实例如何防止重复消费?
操作教程丨通过1Panel快速安装Zabbix,搭建企业级监控系统
.Net通过EFCore和仓储模式实现统一数据权限管控并且相关权限配置动态生成
人工智能如何改变 Anthropic 的工作方式
17.行为型 - 观察者模式 (Observer Pattern)
设计模式简述
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
VonaJS是如何做到文件级别精确HMR(热更新)的?
0
411
济曝喊
2025-12-17
安全
仅通过一句提示词,就可以让大模型变得更有创造力
0
305
讣丢
2025-12-17
安全
“静态回调+上下文指针”模式实现回调机制
0
604
嫂潍
2025-12-17
业界
Flink源码阅读:如何生成StreamGraph
0
346
梁丘艷蕙
2025-12-18
业界
RabbitMQ发布订阅模式同一消费者多个实例如何防止重复消费?
0
749
滕佩杉
2025-12-18
业界
操作教程丨通过1Panel快速安装Zabbix,搭建企业级监控系统
0
463
距佰溘
2025-12-18
业界
.Net通过EFCore和仓储模式实现统一数据权限管控并且相关权限配置动态生成
0
948
欤夤
2025-12-18
安全
人工智能如何改变 Anthropic 的工作方式
0
210
诀锺
2025-12-18
安全
17.行为型 - 观察者模式 (Observer Pattern)
1
909
抽厉
2025-12-19
安全
设计模式简述
0
255
厨浴
2025-12-19
回复
(3)
冈欤寨
2025-11-27 16:50:42
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢,下载保存了
蔡如风
2025-12-9 09:52:36
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
这个有用。
乐敬
7 天前
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
过来提前占个楼
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
诉称
7 天前
关注
0
粉丝关注
22
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994891
kk14977
6845357
4
xiangqian
638210
5
韶又彤
9997
6
宋子
9982
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9951
查看更多
今日好文热榜
128
嵌入式UI框架-抗锯齿画圆弧算法
927
嵌入式UI框架的渐变原理、渐变算法
208
日本股票 API 对接实战指南(实时行情与 IP
556
解决Docker磁盘空间告急:认识并清理“悬空
389
别再只会算直线距离了!用“马氏距离”揪出
521
企业进行信息化后,一定会提高效率吗?真相
509
n8n整合ffmpeg
488
从random随机数看验证码重复数字
522
OceanBase 向量索引优化指南
231
Vue2中能否实现输入中文自动转化为拼音, 且
750
从项目成果到职业晋升:项目经理年终总结的
450
JS逆向-混淆加密-识别&还原-Eval&JSFuck&JS
936
2025年上海防水补漏谁家强?长三角标杆企业
608
正式接入DeepSeek-V3.2,国产AI“双剑合壁
397
守嘉陪诊师培训报名热潮引关注 独家实习机
911
顺序表实现线性结构
72
吴恩达深度学习课程四:计算机视觉 第二周
255
设计模式简述
193
vue 甘特图 vxe-gantt table 连接线的用法
607
[SDR] USRP 双通道与 MIMO 技术:手搓 1 发