新闻详情

新闻详情

首页 / 资讯中心 / 详情

23种设计模式‑桥接(Bridge)设计模式

发布时间:2026/9/30 9:01:05来源:尧图网络
23种设计模式‑桥接(Bridge)设计模式
文章目录一.什么是桥接设计模式二.桥接模式的特点三.桥接模式的结构四.桥接模式的优缺点五. 桥接模式的 C 实现六.桥接模式的 Java 实现七.代码解析八.总结一.什么是桥接设计模式桥接模式Bridge Pattern 是一种结构型设计模式用于将抽象部分与实现部分分离使它们可以独立地变化。通过桥接模式抽象层和实现层之间的耦合度被降低从而使系统具有更好的灵活性和可扩展性。二.桥接模式的特点抽象与实现分离抽象层定义抽象功能而具体实现层定义具体行为通过一个桥接口或引用将两者连接起来。独立变化抽象和实现可以独立扩展不会互相影响。动态组合运行时可以灵活选择和替换实现。三.桥接模式的结构Abstraction抽象类定义高层抽象接口依赖实现类对象。RefinedAbstraction扩展抽象类扩展抽象类提供更高级的操作。Implementor实现类接口定义实现层的通用接口。ConcreteImplementor具体实现类实现 Implementor 接口的具体功能。四.桥接模式的优缺点优点分离抽象与实现两者可以独立扩展互不干扰。使用组合代替继承解决多维度变化场景下的类爆炸问题。运行时可以动态替换实现层对象提高系统灵活性。符合开闭原则新增抽象或者新增实现无需修改对方代码。缺点增加系统的理解难度需要识别出系统中两个独立变化的维度。会增加额外的类数量提升系统复杂度。五. 桥接模式的 C 实现示例场景图形圆形、矩形为抽象维度颜色红色、蓝色为实现维度。图形持有颜色的指针作为“桥”图形和颜色可以各自新增不需要写大量子类。#includeiostreamusingnamespacestd;// Implementor实现类接口颜色classColor{public:virtual~Color()default;virtualvoidshowColor()0;};// ConcreteImplementor 具体实现类红色classRed:publicColor{public:voidshowColor()override{cout红色;}};// ConcreteImplementor 具体实现类蓝色classBlue:publicColor{public:voidshowColor()override{cout蓝色;}};// Abstraction抽象类图形持有实现层对象指针 —— 桥接核心classShape{protected:Color*color;public:Shape(Color*c):color(c){}virtual~Shape()default;virtualvoiddraw()0;};// RefinedAbstraction扩展抽象类 - 圆形classCircle:publicShape{public:Circle(Color*c):Shape(c){}voiddraw()override{cout绘制;color-showColor();cout的圆形endl;}};// RefinedAbstraction扩展抽象类 - 矩形classRectangle:publicShape{public:Rectangle(Color*c):Shape(c){}voiddraw()override{cout绘制;color-showColor();cout的矩形endl;}};// 客户端代码intmain(){Color*rednewRed();Color*bluenewBlue();Shape*s1newCircle(red);Shape*s2newCircle(blue);Shape*s3newRectangle(red);Shape*s4newRectangle(blue);s1-draw();s2-draw();s3-draw();s4-draw();deletes1;deletes2;deletes3;deletes4;deletered;deleteblue;return0;}C运行输出绘制红色的圆形 绘制蓝色的圆形 绘制红色的矩形 绘制蓝色的矩形六.桥接模式的 Java 实现// Implementor 实现接口颜色interfaceColor{voidshowColor();}// 具体实现红色classRedimplementsColor{OverridepublicvoidshowColor(){System.out.print(红色);}}// 具体实现蓝色classBlueimplementsColor{OverridepublicvoidshowColor(){System.out.print(蓝色);}}// Abstraction 抽象类图形abstractclassShape{protectedColorcolor;publicShape(Colorc){this.colorc;}publicabstractvoiddraw();}// RefinedAbstraction 扩展抽象圆形classCircleextendsShape{publicCircle(Colorc){super(c);}Overridepublicvoiddraw(){System.out.print(绘制);color.showColor();System.out.println(的圆形);}}// RefinedAbstraction 扩展抽象矩形classRectangleextendsShape{publicRectangle(Colorc){super(c);}Overridepublicvoiddraw(){System.out.print(绘制);color.showColor();System.out.println(的矩形);}}// 客户端publicclassBridgeDemo{publicstaticvoidmain(String[]args){ColorrednewRed();ColorbluenewBlue();Shapes1newCircle(red);Shapes2newCircle(blue);Shapes3newRectangle(red);Shapes4newRectangle(blue);s1.draw();s2.draw();s3.draw();s4.draw();}}七.代码解析四个角色一一对应桥接模式标准结构ImplementorColor定义实现层接口代表其中一个变化维度ConcreteImplementorRed、Blue实现接口是该维度下的具体实现AbstractionShape高层抽象组合持有 Implementor 的指针/引用这就是桥把两个维度连接起来RefinedAbstractionCircle、Rectangle扩展抽象类完成具体业务。组合替代继承如果用继承实现图形颜色每新增一个图形或者颜色子类数量会爆炸桥接使用组合新增图形只改抽象层新增颜色只改实现层互不影响。动态组合客户端运行时可以自由把任意Shape和任意Color组合不需要编译期写死。扩展演示新增颜色「Yellow」只需要实现Color接口新增图形「Triangle」只需要继承Shape原有代码完全不用改动满足开闭原则。八.总结桥接模式核心分离抽象维度与实现维度使用组合代替继承让两个维度独立变化。适用场景系统存在两个或者多个独立变化的维度不想使用多层继承避免类爆炸需要运行时动态切换实现部分。软考考点记忆归属结构型设计模式别名柄体(Handle‑Body)模式。四大角色抽象类Abstraction、扩充抽象RefinedAbstraction、实现接口Implementor、具体实现ConcreteImplementor。关键点组合代替继承解决多维度类爆炸。易混淆区分适配器是用来兼容已有接口桥接是从设计之初就分离两个变化维度。对比提示适配器重在“转换接口”桥接重在“分离维度持续扩展”。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

FCPX插件红屏与感叹号:版本兼容性排查与修复指南 2026/10/1 5:58:09

FCPX插件红屏与感叹号:版本兼容性排查与修复指南

1. 红屏和感叹号到底在告诉你什么:现象分类与快速自检做FCPX这一行,最怕的其实不是插件功能不够强,而是插件装上去之后,时间线里赫然一片红底、一个黄色感叹号,预览窗口怎么刷都是雪花一样的红屏。这个画面几乎每个剪辑…

阅读更多 →
RTX 5060分子对接与虚拟筛选实战:性能边界、工具链选型与参数调优 2026/10/1 5:58:09

RTX 5060分子对接与虚拟筛选实战:性能边界、工具链选型与参数调优

1. 先搞清楚RTX 5060在分子对接里到底扮演什么角色很多人一上来就问“RTX 5060能不能跑分子对接”,这个问题本身问得不够精确。分子对接和虚拟筛选是两件不同量级的事,前者是单个或少量配体与受体的结合姿态搜索,后者是成千上万个化合物批量过…

阅读更多 →
QuickReporter实战:基于模板替换的Word批量生成方案全解析 2026/10/1 5:58:09

QuickReporter实战:基于模板替换的Word批量生成方案全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
iOS 上运行 Windows 程序:Wine + FEX-Emu + DXMT 兼容层实战 2026/10/1 5:58:09

iOS 上运行 Windows 程序:Wine + FEX-Emu + DXMT 兼容层实战

1. 项目缘起:为什么要在 iOS 上折腾 Wine 和 FEX-Emu“Madeira”这个项目名,乍一看像是个地名,但在我们这圈子里,它指的是一套在 iOS 设备上运行 Windows 应用程序的兼容层方案。核心思路是把Wine、FEX-Emu和DXMT这三样东西串起来…

阅读更多 →
从卡尔曼滤波到信息滤波:多传感器融合的状态估计新思路 2026/10/1 5:58:08

从卡尔曼滤波到信息滤波:多传感器融合的状态估计新思路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
微码本质与安全更新:CPU底层补丁技术解析 2026/10/1 5:58:02

微码本质与安全更新:CPU底层补丁技术解析

1. 微码不是“固件”,也不是“驱动”:先划清三道技术边界很多人第一次听到“微码”(microcode)这个词,下意识会把它和BIOS、UEFI固件、CPU驱动甚至主板厂商的管理工具混为一谈。我刚接触这个概念时也犯过同样的错——在…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉