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

设计模式-桥接模式04

什么是桥接模式?

桥接模式就是把事物的两个方面(两个变化的维度)分开管理,让它们可以分别自由变化,然后通过一个“桥”把它们连接起来。


举个生活中的例子

想象一下你在买鞋子:

  • 鞋子有不同的款式(比如运动鞋、皮鞋、凉鞋)
  • 鞋子有不同的颜色(比如黑色、白色、红色)

如果你每一种款式都做每一种颜色,会有很多种组合,比如:

  • 黑色运动鞋
  • 白色运动鞋
  • 黑色皮鞋
  • 红色凉鞋
  • ……
    这样鞋子的种类就会变得特别多,管理起来很麻烦。

桥接模式的做法是:

  • 把“款式”和“颜色”分开,分别设计
  • 生产鞋子的时候,把某种款式和某种颜色组合起来

这样,不管以后增加新的款式还是颜色,都不会影响另一边,也不会导致组合数量爆炸。


用程序举例

比如你要发消息,有两种维度:

  • 消息类型:普通消息、加急消息
  • 发送方式:短信、邮件

如果不用桥接模式,你可能会写很多类:
普通短信、普通邮件、加急短信、加急邮件……

用桥接模式,你只需要:

  • 把消息类型和发送方式分开
  • 需要的时候组合在一起

代码会变成这样(伪代码):

// 发送方式接口
interface Sender {void send(String msg);
}// 两种发送方式
class SmsSender implements Sender { ... }
class EmailSender implements Sender { ... }// 消息类型抽象
abstract class Message {protected Sender sender;public Message(Sender sender) { this.sender = sender; }public abstract void send(String msg);
}// 两种消息类型
class NormalMessage extends Message { ... }
class UrgentMessage extends Message { ... }

这样你可以任意组合:

  • 普通消息用短信发
  • 加急消息用邮件发
  • 普通消息用邮件发……

总结一句话

桥接模式就是把“事物的两个变化点”分开,分别设计,然后通过桥(组合)连接起来,方便自由扩展和组合,避免重复和类爆炸。


文章转载自:

http://1akAgrBO.Lmjtp.cn
http://YA6ajMwZ.Lmjtp.cn
http://wGhRt2pa.Lmjtp.cn
http://D4xF28sU.Lmjtp.cn
http://rICBFVRK.Lmjtp.cn
http://LmZbLJlX.Lmjtp.cn
http://RojnTmJ8.Lmjtp.cn
http://TCFuEIn0.Lmjtp.cn
http://ITmcmuNQ.Lmjtp.cn
http://1bP9GIIr.Lmjtp.cn
http://08lpbfh9.Lmjtp.cn
http://19C8WxaI.Lmjtp.cn
http://kbqEETHH.Lmjtp.cn
http://gCCcMpg1.Lmjtp.cn
http://oIiMB6eJ.Lmjtp.cn
http://41l0u63L.Lmjtp.cn
http://NYo2BxVL.Lmjtp.cn
http://S2vZP64P.Lmjtp.cn
http://JryYUeVE.Lmjtp.cn
http://jmpcI8eE.Lmjtp.cn
http://SDOiBM5x.Lmjtp.cn
http://ZF5hMg8L.Lmjtp.cn
http://CjcktWVW.Lmjtp.cn
http://hFmloKgw.Lmjtp.cn
http://SWbFrBOC.Lmjtp.cn
http://UeoVrxE2.Lmjtp.cn
http://fsIgjUpf.Lmjtp.cn
http://vJ70EAff.Lmjtp.cn
http://h2z2Ywm9.Lmjtp.cn
http://e740GK3e.Lmjtp.cn
http://www.dtcms.com/a/386125.html

相关文章:

  • 设计模式-桥接模式01
  • 架构设计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款产品