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

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

桥接设计模式

  • 🚩什么是桥接设计模式?
  • 🚩桥接设计模式的特点
  • 🚩桥接设计模式的结构
  • 🚩桥接设计模式的优缺点
  • 🚩桥接设计模式的Java实现
  • 🚩代码总结
  • 🚩总结

🚩什么是桥接设计模式?

桥接模式(Bridge Pattern)结构型设计模式,它将 抽象部分实现部分 分离,使它们可以 独立变化。桥接模式通过 组合 而不是继承来实现抽象与实现的解耦。

使用场景

  • 当需要 避免抽象与实现之间的永久绑定 时。

  • 抽象部分实现部分 都需要 独立扩展 时。

  • 当需要 在运行时切换实现 时。

🚩桥接设计模式的特点

  • 分离抽象与实现:桥接模式将抽象部分与实现部分分离,使它们可以独立变化。

  • 灵活性:抽象部分和实现部分可以独立扩展,互不影响。

  • 可扩展性:新增抽象或实现时,无需修改现有代码。

  • 解耦:通过组合关系替代继承关系,降低系统的耦合度。

🚩桥接设计模式的结构

桥接模式主要包含以下部分:

  • Abstraction(抽象部分):定义抽象接口,并维护一个对 实现部分 的引用。

  • RefinedAbstraction(扩展抽象部分):对抽象部分进行扩展,提供更多的功能。

  • Implementor(实现部分接口):定义实现部分的接口,供抽象部分调用。

  • ConcreteImplementor(具体实现部分):实现 Implementor 接口,提供具体的实现。

图例:在这里插入图片描述

🚩桥接设计模式的优缺点

✅ 优点

  • 分离抽象与实现:抽象部分和实现部分可以独立变化,互不影响。

  • 灵活性:可以在运行时动态切换实现。

  • 可扩展性:新增抽象或实现时,无需修改现有代码。

  • 解耦:通过组合关系替代继承关系,降低系统的耦合度。

❌ 缺点

  • 增加复杂性:桥接模式引入了更多的类和对象,增加了系统的复杂性。

  • 设计难度:需要正确识别抽象部分和实现部分,设计难度较高。

🚩桥接设计模式的Java实现

代码地址:GitHub

  • 首先创建实现部分接口Color,定义方法 OperationImp()
/*** @author hanson.huang* @version V1.0* @InterfaceName Color* @Description 实现部分接口 Color* @date 2025/3/24 10:46**/
public interface Color {public void OperationImp(String name);
}
  • 创建 抽象产品类Product,定义抽象方法 Operation(),并维护一个对 接口Color 的引用。
/*** @author hanson.huang* @version V1.0* @ClassName Product* @Description 产品抽象类* @date 2025/3/24 10:40**/
public abstract class Product {private String name;protected Color color;public void setName(String name) {this.name = name;}public String getName() {return name;}public void setColor(Color color) {this.color = color;}public abstract void Operation();
}
  • 创建 扩展抽象部分 ProductA,实现 Operation() 方法,调用 实现部分 的方法。
/*** @author hanson.huang* @version V1.0* @ClassName ProductA* @Description 扩展抽象部分 ProductA* @date 2025/3/24 10:48**/
public class ProductA extends Product {@Overridepublic void Operation() {color.OperationImp(this.getName());}
}
  • 创建 具体实现部分 Red 和 Blue,分别实现 OperationImp() 方法。

    • Red
    /*** @author hanson.huang* @version V1.0* @ClassName Red* @Description 具体实现部分 Red* @date 2025/3/24 10:49**/
    public class Red implements Color {@Overridepublic void OperationImp(String name) {System.out.println(name + ":红色");}
    }
    
    • Blue
    /*** @author hanson.huang* @version V1.0* @ClassName Blue* @Description 具体实现部分 Blue* @date 2025/3/24 10:49**/
    public class Blue implements Color {@Overridepublic void OperationImp(String name) {System.out.println(name + ":蓝色");}
    }
    
  • 测试桥接模式

/*** @author hanson.huang* @version V1.0* @ClassName BridgePattern* @Description 测试桥接模式* @date 2025/3/24 10:59**/
public class BridgePattern {public static void main(String[] args) {Product productA1 = new ProductA();Product productA2 = new ProductA();Red red = new Red();productA1.setName("产品A1");productA1.setColor(red);productA1.Operation();Blue blue = new Blue();productA2.setName("产品A2");productA2.setColor(blue);productA2.Operation();}
}

📌 运行结果

在这里插入图片描述

🚩代码总结

  • 抽象部分 Product 定义抽象方法 Operation(),并维护一个对 实现部分 Color 的引用。

  • 扩展抽象部分ProductA实现 Operation() 方法,调用 实现部分 的方法。

  • 实现部分接口Color定义方法 OperationImp()

  • 具体实现部分 RedBlue 分别实现 OperationImp() 方法。

🚩总结

  • 桥接模式(Bridge Pattern)抽象部分实现部分 分离,使它们可以 独立变化

  • 适用于 避免抽象与实现之间的永久绑定独立扩展抽象与实现在运行时切换实现 的场景。

  • Java 实现 需要 定义抽象部分实现部分接口 以及 具体实现部分,并通过组合关系将两者连接起来。

✅ 适用场景:

  • 需要 避免抽象与实现之间的永久绑定 时。

  • 需要 独立扩展抽象与实现 时。

  • 需要 在运行时切换实现 时。

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

在这里插入图片描述

相关文章:

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

桥接设计模式 🚩什么是桥接设计模式?🚩桥接设计模式的特点🚩桥接设计模式的结构🚩桥接设计模式的优缺点🚩桥接设计模式的Java实现🚩代码总结🚩总结 🚩什么是桥接设计模式…...

【黑皮书】 AVL树

目录 前言 一 AVL树的介绍 二 单旋转 二 双旋转 总结 前言 AVL树的学习 一 AVL树的介绍 AVL树是带有平衡条件的二叉查找树,这个平衡条件要持续保持,而且必须保证树的深度为O(log(N))最简单的想法就是要求左右子树具有相同的高度 一棵AVL树是…...

【机器学习】什么是决策树?

什么是决策树? 决策树是一种用于分类和回归问题的模型。它通过一系列的“决策”将数据逐步分裂,最终得出预测结果。可以把它看作是一个“树”,每个节点表示一个特征的判断,而每个分支代表了可能的判断结果,最终的叶子…...

【商城实战(74)】数据采集与整理,夯实电商运营基石

【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配&#xf…...

使用独立服务器的最佳方式指南

在寻找合适的主机服务方案时,可以考虑独立服务器,因为它拥有管理员权限以及更高的性能配置。在本指南中,我们将介绍独立服务器的多种用途,并分析为什么选择独立服务器可能是处理高性能、资源密集型应用和大流量网站的最佳方案。 搭…...

视频格式转换:畅享多平台无缝视频体验

视频格式转换:畅享多平台无缝视频体验 视频已成为我们日常生活中不可或缺的一部分,不论是工作中展示方案的演示,还是生活里记录美好瞬间的短片,视频的存在无处不在。然而,面对各类设备、平台对视频格式的不同要求&…...

【HTML 基础教程】HTML 属性

HTML 属性 属性是 HTML 元素提供的附加信息。 属性通常出现在 HTML 标签的开始标签中,用于定义元素的行为、样式、内容或其他特性。 属性总是以 name"value" 的形式写在标签内,name 是属性的名称,value 是属性的值。 HTML 属性 …...

爬虫问题整理(2025.3.27)

此时此刻,困扰我一天的两个问题终于得到了解决,在此分享给大家。 问题1:使用anaconda prompt无法进行pip安装,这里只是一个示例,实际安装任何模块都会出现类似报错。 解决办法:关掉梯子......没错&#xf…...

短信验证码安全需求设计

背景: 近期发现部分系统再短信充值频繁,发现存在恶意消耗短信额度现象,数据库表排查,发现大量非合法用户非法调用短信接口API导致额度耗尽。由于系统当初设计存在安全缺陷,故被不法分子进行利用,造成损失。…...

若依专题——基础应用篇

若依搭建 搭建后端项目 ① Git 克隆并初始化项目 ② MySQL 导入与配置 ③ 启动 Redis 搭建后端项目注意事项? ① 项目初始化慢,执行clean、package ② MySQL导入后,修改application-druid.yml ③ Redis有密码,修改ap…...

给AI装“记忆U盘“:LangChain记忆持久化入门指南

🧠 什么是记忆持久化? 想象AI对话就像和朋友聊天: ​普通模式:每次重启都忘记之前聊过什么​持久化模式:给AI配了个"记忆U盘",聊天记录永不丢失 核心组件三件套 #mermaid-svg-ORm8cbBXsaRy2sZ…...

AI for CFD入门指南(传承版)

AI for CFD入门指南 前言适用对象核心目标基础准备传承机制 AI for CFDLibtorch的介绍与使用方法PytorchAutogluon MakefileVscodeOpenFOAMParaviewGambit 前言 适用对象 新加入课题组的硕士/博士研究生对AICFD交叉领域感兴趣的本科生实习生需要快速上手组内研究工具的合作研…...

DeepSeek+RAG局域网部署

已经有很多平台集成RAG模式,dify,cherrystudio等,这里通过AI辅助,用DS的API实现一个简单的RAG部署。框架主要技术栈是Chroma,langchain,streamlit,答案流式输出,并且对答案加上索引。支持doc,docx,pdf,txt。…...

JavaScript快速入门之函数

引言 总所周知,JavaScript是一个很随便的语言,因此,在学习它的语法的时候,我是和Java语法对比着学的,可能会有些绕 函数 方法:对象(属性,方法) 函数:放在对…...

Java中synchronized 和 Lock

1. synchronized 关键字 工作原理 对象锁:在Java中,每个对象都有一个与之关联的监视器锁(monitor lock)。当一个线程尝试进入由 synchronized 保护的代码块或方法时,它必须首先获取该对象的监视器锁。如果锁已经被其…...

Linux系统-ls命令

一、ls命令的定义 Linux ls命令(英文全拼:list directory contents)用于显示指定工作目录下之内容(列出目前工作目录所含的文件及子目录)。 二、ls命令的语法 ls [选项] [目录或文件名] ls [-alrtAFR] [name...] 三、参数[选项…...

个人学习编程(3-24) 数据结构

括号的匹配&#xff1a; if((s[i]) && now() || (s[i]] && now[)){ #include <bits/stdc.h>using namespace std;int main() {char s[300];scanf("%s",&s);int i;int len strlen(s);stack <char> st;for (i 0; i < len; i){if(…...

.NET开源的智能体相关项目推荐

一、AntSK 由AIDotNet团队开发的人工智能知识库与智能体框架&#xff0c;支持多模型集成和离线部署能力。 核心能力&#xff1a; • 支持OpenAI、Azure OpenAI、星火、阿里灵积等主流大模型&#xff0c;以及20余种国产数据库&#xff08;如达梦&#xff09; • 内置语义内核&a…...

面试八股文--框架篇(SSM)

一、Spring框架 1、什么是spring Spring框架是一个开源的Java平台应用程序框架&#xff0c;由Rod Johnson于2003年首次发布。它提供了一种全面的编程和配置模型&#xff0c;用于构建现代化的基于Java的企业应用程序。Spring框架的核心特性包括依赖注入&#xff08;DI&#xf…...

跨语言语言模型预训练

摘要 最近的研究表明&#xff0c;生成式预训练在英语自然语言理解任务中表现出较高的效率。在本研究中&#xff0c;我们将这一方法扩展到多种语言&#xff0c;并展示跨语言预训练的有效性。我们提出了两种学习跨语言语言模型&#xff08;XLM&#xff09;的方法&#xff1a;一种…...

[识记]Mysql8 远程授权

今天在测试docker时&#xff0c;因更换为Mysql8&#xff0c;使用SQL方式实现远程授权&#xff0c;其方式方法同于Mysql&#xff0c;但语句稍有不同&#xff0c;仅供参考。 登录mysql mysql -u root -p 输入密码: [请依据交互输入你的mysql密码]切换数据库 use mysql;选择需要…...

Nodejs上传文件的问题

操作系统&#xff1a;window和linux都会遇到 软件环境&#xff1a;v20.10.0的Nodejs 1、前端代码如下&#xff1a; 2、后端Nodejs 2.1、注册接口 2.2、上传接口 其中memoryUpload方法代码如下&#xff1a; 3、用页面上传文件 查看具体报错原因&#xff1a; TypeError: sourc…...

无人机螺旋桨平衡标准

螺旋桨平衡是确保无人机(UAV)平稳运行、可靠性和使用寿命的关键过程。螺旋桨的不平衡会导致振动、噪音&#xff0c;并加速关键部件的磨损&#xff0c;从而对飞行性能产生负面影响。 ISO 21940-11:2016标准为旋翼平衡提供了一个广泛引用的框架&#xff0c;定义了可接受的不平衡…...

Qt开发:双缓冲机制

文章目录 什么是双缓冲机制&#xff1f;Qt 中的双缓冲实现方式 什么是双缓冲机制&#xff1f; 双缓冲&#xff08;Double Buffering&#xff09; 是一种减少屏幕绘制闪烁的技术&#xff0c;广泛用于图形渲染和游戏开发。 它的基本原理是&#xff1a; 先在后台缓冲区&#xff0…...

HandyJSON原理

HandyJSON 的优势 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式, 应用广泛. 在 App 的使用过程中, 服务端给移动端发送的大部分都是 JSON 数据, 移动端需要解析数据才能做进一步的处理. 在解析JSON数据这一块, 目前 Swift 中流行的框架基本上是 SwiftyJSON, …...

SpringBoot+策略模式+枚举类,使用配置文件改进,优雅消除if-else,完全符合OOP原则

需求分析 公司做物联网系统的&#xff0c;使用nettry进行设备连接&#xff0c;对设备进行数据采集&#xff0c;根据设备的协议对数据进行解析&#xff0c;解析完成之后存放数据库&#xff0c;但是不同厂家的设备协议不同。公司系统使用了使用了函数式编程的去写了一个解析类&am…...

[力扣每日一练]关于MySQL和pandas的正则表达式应用

一&#xff1a;题目要求 表&#xff1a;Users-------------------------- | Column Name | Type | -------------------------- | user_id | int | | email | varchar | -------------------------- (user_id) 是这张表的唯一主键。 每一行包含用…...

每日免费分享之精品wordpress主题系列~DAY16

主题介绍&#xff1a; 今日在网上寻找wordpress主题的时候逛到了大叔的网站&#xff0c;赶脚这个主题蛮不错的&#xff0c;于是百度一下&#xff0c;果然&#xff0c;这个主题很受欢迎。作为主题下载站追梦者也不甘落后&#xff0c;马上就发布出来了&#xff0c;希望对你们有用…...

OpenCV图像拼接(9)实现图像拼接功能的一个高级接口cv::Stitcher

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::Stitcher 类是OpenCV中用于实现图像拼接功能的一个高级接口。它简化了从一组部分重叠的图像创建全景图的过程&#xff0c;隐藏了许多底层细节…...

MySQL 用户权限与安全管理

MySQL 用户权限与安全管理 在数据库系统中&#xff0c;用户权限与安全管理是保障数据安全性、完整性和隐私性的核心机制。MySQL 提供了丰富的权限管理功能&#xff0c;可以精细地控制用户对数据库、表以及其他数据库对象的访问权限&#xff0c;同时也支持各种安全管理策略来防…...