【设计模式-桥接】
定义
桥接模式(Bridge Pattern)是一种结构型设计模式,它通过将抽象部分与实现部分分离,使它们都可以独立地变化。桥接模式的关键在于将类的抽象部分与其实现部分解耦,以便两者可以独立地变化。这种设计模式的一个主要用途是避免类层次结构的指数增长,尤其是在有多维度变化时,例如设备种类与设备操作。
UML图

角色说明
- Abstraction(抽象类):提供客户端调用的接口,内部包含一个对实现部分对象(Implementor)的引用。
- RefinedAbstraction(扩展抽象类):扩展了Abstraction的功能,通过调用Implementor来实现具体操作。
- Implementor(实现接口):定义实现部分的接口,它不一定与Abstraction的接口完全一致,一般是独立的。
- ConcreteImplementor(具体实现类):实现具体的功能逻辑,它是实现部分的具体实现。
代码
// 实现接口
interface Implementor {void operationImpl();
}// 具体实现类A
class ConcreteImplementorA implements Implementor {@Overridepublic void operationImpl() {System.out.println("ConcreteImplementorA's implementation.");}
}// 具体实现类B
class ConcreteImplementorB implements Implementor {@Overridepublic void operationImpl() {System.out.println("ConcreteImplementorB's implementation.");}
}// 抽象类
abstract class Abstraction {protected Implementor implementor;public Abstraction(Implementor implementor) {this.implementor = implementor;}public abstract void operation();
}// 扩展抽象类
class RefinedAbstraction extends Abstraction {public RefinedAbstraction(Implementor implementor) {super(implementor);}@Overridepublic void operation() {System.out.print("RefinedAbstraction is calling: ");implementor.operationImpl();}
}// 客户端代码
public class BridgePatternDemo {public static void main(String[] args) {Implementor implA = new ConcreteImplementorA();Abstraction abstractionA = new RefinedAbstraction(implA);abstractionA.operation();Implementor implB = new ConcreteImplementorB();Abstraction abstractionB = new RefinedAbstraction(implB);abstractionB.operation();}
}
适用场景
- 当系统需要在多个维度上进行扩展,而又不希望产生大量的子类时。例如,设备种类(手机、电脑等)和设备操作(开机、关机、重启等)是两个独立的维度,可以使用桥接模式来分别处理。
- 当一个类需要在不同的环境下工作,且这些环境可能随时变化。
需要动态地切换实现时,桥接模式可以提供灵活性,因为实现和抽象可以独立变化。
总结
桥接模式通过将抽象与实现解耦,提供了一种灵活扩展和维护系统的方式,尤其适用于系统可能在多个维度上扩展的场景。
相关文章:
【设计模式-桥接】
定义 桥接模式(Bridge Pattern)是一种结构型设计模式,它通过将抽象部分与实现部分分离,使它们都可以独立地变化。桥接模式的关键在于将类的抽象部分与其实现部分解耦,以便两者可以独立地变化。这种设计模式的一个主要…...
JVM JMM 专题篇 ( 12000 字详解 )
一:JVM 简介 JVM 是 Java Virtual Machine 的简称,意为 Java 虚拟机,虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。 常见的虚拟机:JVM、VMwave、Virtual Box,JVM 和其…...
【C++】—— list 模拟实现
【C】—— list 模拟实现 1 list 基础结构2 默认构造3 迭代器3.1 整体框架3.2 成员函数3.3 begin() 与 end() 的实现3.4 operator-> 的实现3.5 const 迭代器3.5.1 const 迭代器为什么命名 const_iterator3.5.2 const 迭代器的实现3.5.3 合并两个迭代器 4 源码 1 list 基础结…...
Redis主要问题
Redis redis是单线程,基于内存操作,所以执行很快。,与网络延迟有关。 还是买早餐的例子,从早餐店买一个包子,首先早餐店得还有包子没有卖完,然后卖出,包子数量-1,重新设定早餐店包…...
vue3 ref的用法及click事件的说明
1、ref可以定义一个简单的属性,也可以是一个复杂的列表、数组等等。 2、为什么要使用 ref?简单的let个变量不行吗?const个变量不行吗? 其实这个跟vue的响应式的系统有关,官方的说明如下: 3、为 ref() 标注…...
通信工程学习:什么是HFC混合光纤同轴电缆
HFC:混合光纤同轴电缆 HFC(Hybrid Fiber Coaxial)混合光纤同轴电缆是一种结合了光纤与同轴电缆的宽带接入网技术。以下是对HFC混合光纤同轴电缆的详细解释: 一、HFC混合光纤同轴电缆的定义与概述 定义:HFC是一种结合光…...
怎么浏览URL的PDF文件呢
最近发现PDF文件网页端打开就是丑,不知道怎么办 1. 看着实在不舒服,用chorm的插件 然后原本本地用的也是2345pdf阅读器 2. 之后也下载了adobe pdf的桌面阅读器 2345打开是这个样子 这个是现在啦 如果要一些安装包什么的,评论见~ 最…...
【2025届华为秋招机考三道编程题之一】华为校招留学生软件开发工程师-真题机考笔试/(200分)- 跳格子3(Java JS Python C)
华为校招机考的题型: 编程:软件测试工程师,算法,OD岗,三道编程题不限语言【C,Python,Java】 校招:600分 120分钟,100/200/300 社招:400分 150分钟…...
高性能缓存利器:Caffeine 在 Spring Boot 中的应用
在现代应用程序中,缓存是提高数据检索速度、减少对数据库或其他数据源访问次数的重要手段。Spring Cache 提供了多种缓存实现方式,而在我们的 Spring Boot 项目中,我们选择了 Caffeine 作为默认的缓存库。 Caffeine 简介 Caffeine 是一个基…...
pWnOS的第二种全新解法(ssh私钥破解、webmin漏洞提权)
端口 端口扫描内容请看:vulnhub(8):pWnOS(还没信息收集就已经成功打点)-CSDN博客 打点 ssh登录公钥收集 ./2017.pl 192.168.234.116 10000 /home/vmware/.ssh/authorized_keys 0 ./2017.pl 192.168.234.11…...
Maven入门学习笔记
一、maven介绍 Maven是一款自动化构建工具,专注服务于JAVA平台的项目构建和依赖管理。在javaEE开发的历史上构建工具的发展也经历了一系列的演化和变迁。 管理jar包 当我们使用SSM之后我们就需要使用非常多的jar包 没有maven找jar包非常的麻烦。 使用maven下载…...
linux驱动开发-arm汇编基础
目录 写在前面 1、Cortex-A7 处理器有 9 种处理模式 2、Cortex-A 寄存器组 通用寄存器 1、汇编语法 2、Cortex-A7 常用汇编指令 2.1 处理器内部数据传输指令 2.1.1 传输数据操作类型 1、MOV指令 2、MRS指令 3、MSR指令 2.2、存储器访问指令 2.2.1 LDR指令 2.2.2 …...
【HarmonyOS】鸿蒙头像上传-(编辑个人信息页- 头像上传)+实时数据更新
#效果图 #思路 ##步骤: ###一、利用picker api选择1张图片 实例化选择器参数(使用new PhotoSelectOptions())实例化图片选择器 (使用newPhotoViewPicker() )调用图片选择器的select方法传入选择器参数完成图片选取获得结果 利用picker api选择1张图片 async sele…...
[数据集][目标检测]无人机识别检测数据集VOC+YOLO格式6986张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):6986 标注数量(xml文件个数):6986 标注数量(txt文件个数):6986 标注…...
基于SSM的二手交易管理系统的设计与实现 (含源码+sql+视频导入教程+文档)
👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的二手交易管理系统1拥有两种角色 管理员:商品管理、订单管理、充值管理、用户管理等用户:发布商品、查看闲置、充值账户、查看所有订单、发布求购信息、修…...
linux-centos 设置系统时间
CentOS 系统提供了多种方式来设置和管理时间,包括手动设置时间和使用网络时间协议 (NTP) 自动同步时间。以下是几种常见的方法: 手动设置时间 使用date命令临时设置时间: 如果你只需要临时设置时间,可以使用 date 命令࿱…...
【Linux基础】冯诺依曼体系结构操作系统的理解
目录 前言一,冯诺依曼体系1. 为什么有内存结构?2. 对硬件中数据流动的再理解 二,操作系统(Operator System)1. 概念2. 操作系统结构的层状划分3. 操作系统对硬件管理的理解4. 用户与操作系统的关系的理解5. 系统调用和库函数的关系6. 为什么要有操作系统…...
算法题解:斐波那契数列(C语言)
斐波那契数列 斐波那契数列是一个经典的数学序列,其中每一项的值是前两项的和。数列的前两项通常定义为0和1,即: F(0) 0 F(1) 1 F(n) F(n-1) F(n-2) (n ≥ 2)输入一个正整数n,求斐波那契数列的第n项。 样例 假设输入 n …...
SSM 框架 个人使用习惯 详细
SpringMVC主要是controller、service、dao(mapper)层交互 controller:处理数据请求的接口 service:处理请求的数据 dao(mapper):对数据进行持久化 下面我将对controller和service.impl进行讲…...
[羊城杯 2020]Blackcat1
知识点:数组加密绕过 进入页面熟悉的web三部曲(url地址,web源代码,web目录扫描) url地址没有什么东西去看看源代码. 这有一个mp3文件点一下看看. 在最后面发现了 PHP源码. if(empty($_POST[Black-Cat-Sheriff]) || em…...
非隔离电源环境下USB转串口调试的致命隐患:从爆炸事故看隔离串口的必要性
1. 当USB转串口遇上非隔离电源:一场隐藏的火花秀 前两天朋友公司发生了一起令人后怕的事故:一台咖啡机的WiFi模块调试过程中,USB转串口模块突然爆炸,伴随火光和巨响,设备当场报废。更可怕的是,这种事故绝非…...
2025届学术党必备的十大AI科研方案推荐榜单
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在当下的学术与内容创作范畴之内,对于AI生成文本的检测变得越发严格起来。降AI率…...
从package.xml到CMakeLists.txt:手把手教你配置一个ROS1机器人控制包(附完整项目模板)
从package.xml到CMakeLists.txt:构建工业级ROS1机器人控制包的完整指南 在机器人操作系统(ROS)开发中,功能包的配置质量直接影响项目的可维护性和扩展性。本文将带您深入理解ROS1功能包的核心配置文件,通过一个完整的工业机器人控制包案例&am…...
别再为vLLM的max_model_len报错头疼了!手把手教你用Meta-Llama-3.1-8B-Instruct跑通第一个推理
从零突破vLLM 5.0.4实战:Meta-Llama-3.1-8B-Instruct推理全流程解析 当你第一次尝试用vLLM加载Llama 3.1这样的前沿大模型时,是否曾被突如其来的max_model_len报错打得措手不及?作为专为高性能推理设计的框架,vLLM在5.0.4版本中对…...
破局双系统文件壁垒:WinBtrfs驱动终极应用指南
破局双系统文件壁垒:WinBtrfs驱动终极应用指南 【免费下载链接】btrfs WinBtrfs - an open-source btrfs driver for Windows 项目地址: https://gitcode.com/gh_mirrors/bt/btrfs 在Windows与Linux双系统环境中,用户常常面临跨系统文件访问的难题…...
Whistle Mock实战:精准模拟流式JSON接口的响应头与数据体
1. 为什么我们需要精准模拟流式JSON接口 在前后端分离的开发模式下,前端工程师经常需要模拟后端接口进行开发调试。特别是遇到流式JSON数据这种特殊场景时,简单的数据Mock往往无法满足需求。我遇到过不少这样的情况:明明数据内容完全正确&…...
告别烧脑报文!用ESP8266+51单片机零基础玩转OneNet MQTT(附报文生成工具)
从零到一:ESP8266与51单片机轻松对接OneNet MQTT全指南 当你第一次听说MQTT协议时,是否被那些晦涩的十六进制报文吓退?作为物联网领域最流行的轻量级通信协议,MQTT本应让设备间的对话变得简单,但传统教程中复杂的报文…...
基于C++实现时间片与高优先级抢占调度算法的进程与资源管理功能模拟操作系统OS
MockProcessCmd [Experiment]设计和实现基于时间片与高优先级抢占调度算法的进程与资源管理功能模拟 OS Computer operating system experiment. 开发环境 IDE:Visual Studio 2019Language:C STL 功能需求 设计和实现进程与资源管理,并…...
KeymouseGo:让重复操作自动化的效率工具指南
KeymouseGo:让重复操作自动化的效率工具指南 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo 在数字化工作环境中…...
森利威尔SL3041B替换LM5018 100V降压3.3V5V12V恒压芯片
在工业、汽车及电池供电的电子系统中,高压降压转换器的选择往往需要在性能、可靠性与成本之间取得平衡。传统上,LM5018等进口芯片凭借其高输入电压范围和稳定的性能占据一定市场,但随着国内半导体技术的成熟,国产替代方案已具备与…...
