什么是桥接模式?

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


举个生活中的例子

想象一下你在买鞋子:

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

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

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

桥接模式的做法是:

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

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


用程序举例

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

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

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

用桥接模式,你只需要:

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

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

// 发送方式接口
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://www.pswp.cn/news/923698.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/923698.shtml
英文地址,请注明出处:http://en.pswp.cn/news/923698.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

群晖企业级NAS :从中小企业效率工具到核心业务数据基石

在数字化转型加速的今天,数据已成为企业最核心的资产。全球超半数财富 500 强企业选择群晖(Synology)作为数据管理伙伴,其企业级 NAS 解决方案凭借 DSM 操作系统的生态优势、硬件与软件的深度协同,以及覆盖全场景的产品…

C++访问限定符private、public、protected的使用场景

C 访问控制关键字:public、private、protected 在C中,public、private和protected是访问控制关键字,用于实现面向对象编程的封装特性,控制类成员的访问权限。 访问控制关键字的使用场景 1. public(公有成员&#xff09…

CKA08--PVC

Task mariadb namespace 中的 MariaDB Deployment 被误删除。请恢复该 Deployment 并确保数据持久性。 请按照以下步骤: 如下规格在 mariadb namespace 中创建名为 mariadb 的 PersistentVolumeClaim (PVC): 访问模式为 ReadWriteOnce 存储为 250Mi 集群…

Freertos系列(调度机制与创建任务)

如果不想看的可以直接使用git把我的代码下载出来,里面工程挺全的,后期会慢慢的补注释之类的 码云地址:stm32学习笔记: stm32学习笔记源码 如果不会使用git快速下载可以选择直接下载压缩包或者去看看git的使用 Git入门教程-CSDN博客 一 调…

C++中std::vector Vs std::deque VS std::list对比详解

1) 核心差异速览 std::vector:连续内存、随机访问 O(1)、尾部 push_back 摊还 O(1)、中间插入/删除 O(n),非常缓存友好。std::deque:分段(block)存储,不是整体连续;随机访问 O(1)(但…

【js】js实现日期转大写:

文章目录一、方法:二、使用效果:一、方法: export function dateToChnese(strDate) {let dateMap {year: "",month: "",day: ""}if (!strDate || strDate.length 0) return dateMap;const chineseDigit [&…

逆向 js

参考地址:https://blog.csdn.net/2302_80243887/article/details/146349209 注意事项 1. crypto-js 安装 需要你的.js文件同级目录执行npm install crypto-js 才能让js文件引入包 注意事项2: crypto-js 执行js 报错_external_runtime.py" A…

FFmpeg的安装及简单使用

简介 FFmpeg 是一个跨平台的音视频处理工具库/命令行工具,其核心作用是:对音视频文件或流进行解码、转换(编码)、封装/解封装等处理。 友情提示 本次安装以Windows64位操作系统为例 一、下载及安装 1、前往FFmpeg官网&#xff0…

Science Advances--3D打印生物启发扭曲双曲超材料,用于无人机冲击缓冲和自供电实时传感

湍流引起的振动会对飞机的结构完整性及飞行稳定性造成巨大威胁,尤其是在无人驾驶飞行器(UAV)中,实时的冲击监测和轻质防护尤为重要。该研究基于生物启发,通过3D 打印尼龙PA12 制备了一种扭转-双曲面超材料(…

AI大模型的研发流程

开发一个大模型是一个庞大、复杂且资源密集的系统工程,涉及算法研究、工程实现、数据管理和算力基础设施等多个层面。下面我将为您提供一个从零开始开发大模型的全景式路线图,涵盖了从概念到部署的全过程。请注意,完全从零开始训练一个类似GP…

Docker desktop安装Redis Cluster集群

本文章将介绍如何在 Windows 系统的 Docker Desktop 环境中搭建 Redis 集群。将创建一个包含 6 个节点(3 主 3 从)的 Redis 集群。 环境准备 Windows 10/11 操作系统Docker Desktop 已安装并运行 步骤 清理环境(如之前有尝试) 如果…

Zynq开发实践(SDK之第一个纯PS工程)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】学编程的时候,大家一般都比较重视第一个项目的创建和执行。第一个fpga程序一般是led闪烁,第一个c程序一般就是hello world程…

EJS(Embedded JavaScript)(一个基于JavaScript的模板引擎,用于在HTML中嵌入动态内容)

文章目录**1. 什么是 EJS?****2. 核心特点**- **接近原生 HTML**- **动态渲染**- **轻量高效**- **与 Express 深度集成****3. EJS 的基本语法****4. 示例代码****HTML 模板(views/user.ejs)****Express 中渲染模板****5. 使用场景**1. **服务…

Linux:基于阻塞队列的生产者消费模型

文章目录一、生产者消费者模型的基本原则💕💕生产者-消费者模型的 321 原则💕💕二、为何要使用生产者消费者模型1. 解耦2. 支持并发 (提高效率)3. 忙闲不均的支持三、基于 BlockingQueue 的生产者消费者模型…

ensp启动路由器报错40

1. 先关闭 eNSP 模拟器、关闭 Virtualbox2. 在everything里面搜索 .VirtualBox文件夹,然后删掉3. 再打开 eNSP,不添加任何模拟设备,单击“菜单-工具-注册设备”,将 AR_Base 重新注册。4. 关闭 eNSP 模拟器

代码随想录二刷之“图论”~GO

A.深搜与广搜(重点掌握!!!!) 深搜类似于回溯法 搜索方向,是认准一个方向搜,直到碰壁之后再换方向换方向是撤销原路径,改为节点链接的下一个路径,回溯的过程…

基于Echarts+HTML5可视化数据大屏展示-白茶大数据溯源平台V2

效果展示&#xff1a;代码结构&#xff1a;主要代码实现 index.html布局 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta n…

Linux 系统网络配置及 IP 地址相关知识汇总

Linux 系统网络配置及 IP 地址相关知识汇总 一、IP地址基础 IP地址&#xff1a;在计算机网络中用来唯一标识一台设备的一组数字。 二、IPv4相关知识 1. IPv4的表示方法 采用点分十进制表示&#xff0c;即由4个0-255的十进制数通过点分隔组成&#xff08;如192.168.1.1&#xff…

百度股价突破120美元创年内新高,AI云成为增长新引擎

美东时间9月16日&#xff0c;百度&#xff08;NASDAQ: BIDU&#xff09;美股大涨近8%&#xff0c;收盘价突破120美元&#xff0c;站上124美元高位&#xff0c;创2023年10月以来新高。北京时间9月17日港股开盘&#xff0c;百度&#xff08;09888.HK&#xff09;港股再次暴涨&…

《彩虹六号:围攻》“Siege X”发布会3月14日举行!

使用jQuery的常用方法与返回值分析 jQuery是一个轻量级的JavaScript库&#xff0c;旨在简化HTML文档遍历和操作、事件处理以及动画效果的创建。本文将介绍一些常用的jQuery方法及其返回值&#xff0c;帮助开发者更好地理解和运用这一强大的库。 1. 选择器方法 jQuery提供了多种…