23种设计模式-结构型模式之桥接模式(Java版本)

Java 桥接模式(Bridge Pattern)详解

🌉 什么是桥接模式?

桥接模式用于将抽象部分与实现部分分离,使它们可以独立变化。
通过在两个独立变化的维度之间建立“桥”,避免因多维度扩展导致的类爆炸。


🧠 使用场景

  • 系统需要在多个维度进行扩展
  • 想解耦抽象和实现,让它们各自独立发展
  • 减少子类的数量,避免类爆炸

🏗️ 模式结构

  • Abstraction(抽象类):定义高层接口,持有 Implementor 引用
  • RefinedAbstraction(扩充抽象类):扩展抽象定义
  • Implementor(实现接口):定义底层实现接口
  • ConcreteImplementor(具体实现):提供具体实现

✅ 示例:不同品牌的电视远程控制

实现接口(Implementor)

public interface TV {void on();void off();void tuneChannel(int channel);
}

具体实现(ConcreteImplementor)

public class SonyTV implements TV {public void on() { System.out.println("Sony TV is ON"); }public void off() { System.out.println("Sony TV is OFF"); }public void tuneChannel(int channel) { System.out.println("Sony TV tuned to channel " + channel); }
}public class SamsungTV implements TV {public void on() { System.out.println("Samsung TV is ON"); }public void off() { System.out.println("Samsung TV is OFF"); }public void tuneChannel(int channel) { System.out.println("Samsung TV tuned to channel " + channel); }
}

抽象类(Abstraction)

public abstract class RemoteControl {protected TV implementor;public RemoteControl(TV implementor) { this.implementor = implementor; }public abstract void on();public abstract void off();
}

扩充抽象类(RefinedAbstraction)

public class AdvancedRemoteControl extends RemoteControl {public AdvancedRemoteControl(TV implementor) {super(implementor);}@Overridepublic void on() {implementor.on();}@Overridepublic void off() {implementor.off();}public void setChannel(int channel) {implementor.tuneChannel(channel);}
}

客户端调用

public class Client {public static void main(String[] args) {TV sony = new SonyTV();RemoteControl remote = new AdvancedRemoteControl(sony);remote.on();((AdvancedRemoteControl) remote).setChannel(5);remote.off();TV samsung = new SamsungTV();remote = new AdvancedRemoteControl(samsung);remote.on();((AdvancedRemoteControl) remote).setChannel(10);remote.off();}
}

🧩 优点

  • 分离抽象与实现,减少耦合
  • 提高可扩展性,各自独立改变
  • 减少子类数量

⚠️ 缺点

  • 增加系统复杂度,结构较多
  • 初期设计需仔细分析抽象层次

✅ 使用建议

当系统在多个维度上扩展时,且希望解耦抽象和实现,避免类爆炸,使用桥接模式是理想选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/77117.shtml

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

相关文章

基于SIMMECHANICS的单自由度磁悬浮隔振器PID控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 单自由度磁悬浮减振器工作原理简介 4.2 SIMMECHANICS工具箱 5.完整工程文件 1.课题概述 基于SIMMECHANICS的单自由度磁悬浮隔振器PID控制系统simulink建模与仿真。其中,SIMMECHANICS是M…

contenthash 持久化缓存

以下是关于持久化缓存(contenthash)的深度技术解析,涵盖原理、配置策略及最佳实践,帮助我们构建高性能前端应用的缓存体系: 一、缓存机制核心原理 1. 浏览器缓存决策矩阵 触发条件缓存行为对应场景URL 未变化 + 强缓存有效直接读取磁盘/内存缓存未修改的静态资源URL 变化…

【前端记事】关于electron的入门使用

electron入门使用 背景how to start第一步 创建一个vite-vue3项目第二步 装各种依赖第三步 配置vite.config.jspackage.jsonelectron入口 启动重写关闭、隐藏、最大化最小化 背景 最近对electron比较感兴趣,折腾一段时间后有了点眉目,记录一下 how to …

跨浏览器音频录制:实现兼容的音频捕获与WAV格式生成

在现代Web开发中,音频录制功能越来越受到开发者的关注。无论是在线会议、语音识别还是简单的语音留言,音频录制都是一个重要的功能。然而,实现一个跨浏览器的音频录制功能并非易事,因为不同浏览器对音频录制API的支持存在差异。本…

Semantic Kernel也能充当MCP Client

背景 笔者之前,分别写过两篇关于Semantic Kernel(下简称SK)相关的博客,最近模型上下文协议(下称MCP)大火,实际上了解过SK的小伙伴,一看到 MCP的一些具体呈现,会发现&…

识别图片内容OCR并重命名文件

在工作场景中,经常出现通过拍摄设备获取图片后,未及时进行有效命名的情况。这些图片中往往包含关键信息(如合同编号、产品型号、日期等),需要人工识别并命名,存在以下痛点: 效率低下&#xff1…

【防火墙 pfsense】3 portal

(1)应该考虑的问题: ->HTTPS 连接的干扰问题:HTTPS 是一种旨在防止恶意第三方截取和篡改流量的协议。但强制门户的工作原理是截取并改变终端用户与网络之间的连接。这对于 HTTP 流量来说不是问题,但使用 HTTPS 加密…

银发科技:AI健康小屋如何破解老龄化困局

随着全球人口老龄化程度的不断加深,如何保障老年人的健康、提升他们的生活质量,成为了社会各界关注的焦点。 在这场应对老龄化挑战的战役中,智绅科技顺势而生,七彩喜智慧养老系统构筑居家养老安全网。 而AI健康小屋作为一项创新…

TCP协议理解

文章目录 TCP协议理解理论基础TCP首部结构图示字段逐项解析 TCP是面向连接(Connection-Oriented)面向连接的核心表现TCP 面向连接的核心特性TCP 与UDP对比 TCP是一个可靠的(reliable)序号与确认机制(Sequencing & Acknowledgment&#xf…

什么是机器视觉3D碰撞检测?机器视觉3D碰撞检测是机器视觉3D智能系统中安全运行的核心技术之一

机器视觉3D碰撞检测是一种结合计算机视觉和三维空间分析的技术,旨在检测三维场景中物体之间是否发生碰撞(即物理接触或交叠)。它通过分析物体的形状、位置、运动轨迹等信息,预测或实时判断物体间的碰撞可能性。以下是其核心要点: 基本原理 三维感知:利用深度相机(如RGB-…

nacos设置权重进行负载均衡不生效

nacos设置权重进行负载均衡不生效,必须在启动类下加上这个bean Beanpublic IRule nacosRule(){return new NacosRule();}如下图所示

创建 Node.js Playwright 项目:从零开始搭建自动化测试环境

一、环境准备 在开始创建 Playwright 项目之前,确保你的电脑上已经安装了以下工具: Node.js:Playwright 依赖于 Node.js 环境,确保你已经安装了最新版本的 Node.js。可以通过以下命令检查是否安装成功: node -v npm -…

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(11): てあります。

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(11): てあります。 1、前言(1)情况说明(2)工程师的信仰 2、知识点(1)てあります。(2)…

【金仓数据库征文】- 深耕国产数据库优化,筑牢用户体验新高度

目录 引言 一、性能优化:突破数据处理极限,提升运行效率 1.1 智能查询优化器:精准优化数据检索路径 1.2 并行处理技术:充分释放多核计算潜力 1.3 智能缓存机制:加速数据访问速度 二、稳定性提升:筑牢…

Java代理讲解

代理 代理模式是一种结构型设计模式,它允许我们通过添加一个代理对象来控制对另一个对象的访问。代理对象和实际对象具有相同的接口,使得客户端在不知情的情况下可以使用代理对象进行操作。代理对象在与客户端进行交互时,可以控制对实际对象…

利用deepseek快速生成甘特图

一、什么是甘特图 甘特图(Gantt Chart)是一种直观的项目管理工具,广泛应用于多个领域,主要用于​​时间规划、任务分配和进度跟踪​​。 直观性​​:时间轴清晰展示任务重叠或延迟。 ​​灵活性​​:支持…

从零开始学习SLAM|技术路线

概念 视觉SLAM(Simultaneous Localization and Mapping)系统中,整个过程通常分为 前端 和 后端 两个主要部分。前端处理的是从传感器数据(如相机图像、激光雷达等)中提取和处理信息,用于实时定位和建图&am…

LeetCode 解题思路 44(Hot 100)

解题思路: dp 数组的含义: 以 nums[i] 为结尾的最长递增子序列的长度。递推公式: dp[i] Math.max(dp[i], dp[j] 1)。dp 数组初始化: dp[i] 1。遍历顺序: 从小到大去遍历,从 i 1 开始,直到 …

精益数据分析(22/126):解锁创业增长密码与长漏斗分析

精益数据分析(22/126):解锁创业增长密码与长漏斗分析 在创业与数据分析的探索旅程中,我们都在不断寻求新的知识和方法,以提升创业的成功率。我一直期望能和大家共同学习、共同进步,今天就让我们继续深入研…

大模型应用开发之LLM入门

一、大模型概述 1、大模型概念 LLM是指用有大量参数的大型预训练语言模型,在解决各种自然语言处理任务方面表现出强大的能力,甚至可以展现出一些小规模语言模型所不具备的特殊能力 2、语言模型language model 语言建模旨在对词序列的生成概率进行建模…