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

设计模式-桥接模式01

一、桥接模式简介

桥接模式是一种结构型设计模式,它的核心目的是将抽象部分与实现部分分离,使它们都可以独立变化。通过引入桥接模式,可以避免多维度继承带来的类爆炸问题。

通俗理解:桥接模式就是把“两个变化的维度”分开管理,通过“桥”进行连接。


二、适用场景

  • 当类的功能有多个维度变化(如平台和功能),并且每个维度都可能扩展时。
  • 避免因为多维度扩展而导致的类爆炸(比如每个维度都用继承,会有大量子类)。
  • 希望能够动态切换实现。

典型例子:
假如你要开发一个图形库,支持不同的图形(圆、方)和不同的显示方式(矢量、位图),如果直接继承,会导致每种图形和每种显示方式都要有一个类,类数量 = 图形数量 × 显示方式数量。而桥接模式可以将图形和显示方式分开实现,并通过桥接连接。


三、结构分析

桥接模式主要包含以下角色:

  1. 抽象类(Abstraction):定义抽象部分的接口,并引用实现部分的对象。
  2. 扩充抽象类(RefinedAbstraction):扩展抽象接口。
  3. 实现类接口(Implementor):定义实现部分的接口。
  4. 具体实现类(ConcreteImplementor):实现实现类接口的具体类。

UML类图:

      Abstraction||-------------------|                  |
RefinedAbstraction      Implementor||ConcreteImplementor

四、代码实例

假设我们有不同类型的消息(加急、普通),以及不同的消息发送方式(短信、邮件)。

1. 实现部分接口

// Implementor
public interface MessageSender {void send(String message);
}// ConcreteImplementor
public class SmsSender implements MessageSender {public void send(String message) {System.out.println("发送短信: " + message);}
}public class EmailSender implements MessageSender {public void send(String message) {System.out.println("发送邮件: " + message);}
}

2. 抽象部分

// Abstraction
public abstract class Message {protected MessageSender sender;public Message(MessageSender sender) {this.sender = sender;}public abstract void sendMessage(String message);
}// RefinedAbstraction
public class UrgentMessage extends Message {public UrgentMessage(MessageSender sender) {super(sender);}public void sendMessage(String message) {sender.send("[加急] " + message);}
}public class NormalMessage extends Message {public NormalMessage(MessageSender sender) {super(sender);}public void sendMessage(String message) {sender.send("[普通] " + message);}
}

3. 客户端调用

public class Client {public static void main(String[] args) {MessageSender sms = new SmsSender();MessageSender email = new EmailSender();Message urgentSms = new UrgentMessage(sms);Message normalEmail = new NormalMessage(email);urgentSms.sendMessage("系统故障,请速处理!");normalEmail.sendMessage("每周例会通知。");}
}

输出结果:

发送短信: [加急] 系统故障,请速处理!
发送邮件: [普通] 每周例会通知。

五、优缺点

优点

  • 分离抽象和实现,各自可以独立扩展,符合开闭原则。
  • 降低类的数量,避免多维度子类爆炸。
  • 动态组合实现,灵活性高。

缺点

  • 增加了系统设计的复杂度,多了一个抽象层。

六、总结

桥接模式适用于多维度变化的场景,是一种典型的“组合优于继承”的设计思想。它让抽象和实现可以独立扩展,是大型系统架构中常用的模式之一。


文章转载自:

http://IqFiguOe.hnrLs.cn
http://i6zny7fo.hnrLs.cn
http://OnwMdctL.hnrLs.cn
http://yvj3QGDK.hnrLs.cn
http://NNX2QHAF.hnrLs.cn
http://vupaq19H.hnrLs.cn
http://tZg0qcIr.hnrLs.cn
http://z2o1F0kV.hnrLs.cn
http://DzE1OvlS.hnrLs.cn
http://skNYps62.hnrLs.cn
http://pyjbLBME.hnrLs.cn
http://Y85guaNV.hnrLs.cn
http://X2hVxaHq.hnrLs.cn
http://9wCLiDCP.hnrLs.cn
http://NHuS0zC8.hnrLs.cn
http://fmDWI6jT.hnrLs.cn
http://MAFUEZkK.hnrLs.cn
http://UeeWFj7R.hnrLs.cn
http://h4ZSziAG.hnrLs.cn
http://VEPXnVIn.hnrLs.cn
http://6mvABn1w.hnrLs.cn
http://DANANsFL.hnrLs.cn
http://xWI9fYZs.hnrLs.cn
http://Hgj7yFCN.hnrLs.cn
http://QSYjuqvo.hnrLs.cn
http://FE3OxKNs.hnrLs.cn
http://cw8thGab.hnrLs.cn
http://ZXJU6wTF.hnrLs.cn
http://LZRC1bS9.hnrLs.cn
http://fwfwA9bp.hnrLs.cn
http://www.dtcms.com/a/386124.html

相关文章:

  • 架构设计java
  • 零知IDE——基于STM32F407VET6的HC-SR505安防监控系统
  • P1439 两个排列的最长公共子序列-普及+/提高
  • C#上位机软件:1.2 工控上位机学习内容和前提条件
  • 非常经典的Android开发问题-mipmap图标目录和drawable图标目录的区别和适用场景实战举例-优雅草卓伊凡
  • Linux-> UDP 编程2
  • EPLAN-关联参考
  • 实验部分撰写要求
  • R语言入门课| 08 变量的重编码与重命名
  • Ubuntu 系统下搭建 FTP 服务器及文件传输
  • Field II 超声成像仿真 --2-CPWC (Coherent Plane-Wave Compounding)
  • 具身导航技能分解与重组!SkillNav:基于技能的视觉语言导航智能体混合架构
  • 【ADB】多设备文件传输工具
  • Vue3 通过JSON渲染el-table-column生成完整el-table
  • 传输层协议——TCP协议
  • ChromaDB探索
  • 无人设备遥控器之帧同步技术篇
  • redis如何搭建哨兵集群(docker,不同机器部署的redis和哨兵)
  • C#之开放泛型和闭合泛型
  • typescript+vue+node项目打包部署
  • Python/JS/Go/Java同步学习(第十五篇)四语言“字符串去重“对照表: 财务“小南“纸式去重术处理凭证内容崩溃(附源码/截图/参数表/避坑指南)
  • 数据库基础知识入门:从概念到架构的全面解析
  • 负载均衡器和CDN层面保护敏感文件:防止直接访问.git等敏感目录
  • 微算法科技(NASDAQ: MLGO)研究隐私计算区块链框架,赋能敏感数据流通
  • 分析并预测糖尿病患者 R
  • 【Cesium 开发实战教程】第四篇:动态数据可视化:实时 GPS 轨迹与时间轴控制
  • 大数据毕业设计选题推荐-基于大数据的快手平台用户活跃度分析系统-Spark-Hadoop-Bigdata
  • HTML打包EXE工具中的WebView2内核更新指南
  • 固定资产管理软件是什么?哪家好?对比分析10款产品
  • gdb-dashboard使用