Java23种设计模式-结构型模式之桥接模式

桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化

通常以下角色:
角色1.抽象类(Abstraction):定义抽象接口。
角色2.扩展抽象类(Refined Abstraction):扩展抽象类,添加具体的功能。
角色3.实现类(Implementor):定义实现接口。
角色4.具体实现类(Concrete Implementor):实现实现类的具体方法。

优点包括:
抽象和实现的分离:使得抽象部分和实现部分可以独立地进行扩展和修改。
更好的可扩展性:可以方便地添加新的抽象类和实现类。
灵活组合:可以根据具体需求组合不同的抽象和实现。
提高复用性:抽象部分和实现部分都可以被复用。

缺点包括:
增加系统复杂性:引入了额外的类和对象,可能会增加系统的复杂性。
理解难度增加:对于不熟悉该模式的开发者来说,理解和使用可能会有一定难度。
开发成本增加:在设计和实现过程中需要花费更多的时间和精力。
代码可读性降低:过多的类和对象可能会降低代码的可读性。
维护成本增加:当系统规模增大时,维护成本也会相应增加。

应用场景
1.图形系统:可以将图形的表现形式和绘制方式分离,以便更灵活地扩展和组合。
2.软件配置:将配置的不同部分(如界面显示和数据处理)分离。
3.媒体播放器:将媒体的不同格式和播放方式进行分离。
4.数据库访问:把数据库操作和具体的数据库类型进行分离。
5.操作系统API:使操作系统的不同功能和具体实现分开。
6.文件格式处理:把文件的逻辑和物理存储方式分开。
7.游戏开发:例如,将游戏角色的行为和具体的动画效果分离。
8.电子设备驱动:将设备的通用功能和特定硬件的实现分开。
通过使用桥接模式,可以提高系统的灵活性、可扩展性和可维护性,使系统更易于扩展和修改。

示例:Abstraction 是抽象部分,它定义了一个 performOperation 方法。ImplementationA 和 ImplementationB 是实现部分,它们分别实现了 Abstraction 的 performOperation 方法。Demo可以通过 Abstraction 接口来调用不同的实现对象,从而实现了抽象与实现的解耦

// 抽象部分
interface Abstraction {void perfprmOperation();
}
// 实现部分
public class ImpleMenttationA implements Abstraction{@Overridepublic void perfprmOperation() {System.out.println("Performing Operation A");}
}
// 实现部分
public class ImpleMenttationB implements Abstraction{@Overridepublic void perfprmOperation() {System.out.println("Performing Operation B");}
}
//Demo
public class BridgePatternDemo {public static void main(String[] args) {Abstraction abstractionA = new ImpleMenttationA();abstractionA.perfprmOperation(); // 输出: Performing Operation AAbstraction abstractionB = new ImpleMenttationA();abstractionB.perfprmOperation(); // 输出: Performing Operation B}}

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

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

相关文章

通过nrm管理源地址

安装nrm npm install -g nrm版本及帮助 Options:-V, --version 查看版本号-h, --help 帮助命令如下图 常用命令 Commands:ls 全部注册数据源列表current [options] 显示当前使用的…

ICCV2023人脸识别TransFace论文及代码学习笔记

论文链接:https://arxiv.org/pdf/2308.10133.pdf 代码链接:GitHub - DanJun6737/TransFace: Code of TransFace 背景 尽管ViTs在多种视觉任务中展示了强大的表示能力,但作者发现,当应用于具有极大数据集的人脸识别场景时&#…

SpringMVC 源码剖析

SpringMVC 源码剖析 0 从源码角度分析SpringMVC执行流程 // 前端控制器,SpringMVC最核心的类 public class DispatcherServlet extends FrameworkServlet {// 前端控制器最核心的方法,这个方法是负责处理请求的,一次请求,调用一次…

C语言趣味代码(三)

这一篇主要围绕写一个程序---寻找数字 来写,在这篇我会详细和大家介绍基本实现以及它的改良版,还有相关知识的拓展,干货绝对满满。 1. 寻找数字 在这一主题下,我们会编写一些代码,来锻炼玩家的反应力,同时…

【python源码解析】深入 Pandas BlockManager 的数据结构和初始化过程

作者介绍:10年大厂数据\经营分析经验,现任大厂数据部门负责人。 会一些的技术:数据分析、算法、SQL、大数据相关、python 欢迎加入社区:码上找工作 作者专栏每日更新: LeetCode解锁1000题: 打怪升级之旅 python数据分析…

Vue2学习笔记(尚硅谷天禹老师)

目录 一、入门案例 二、模板语法 三、数据绑定 四、el和data的两种写法 五、MVVM模型 六、Object.defineproperty方法 七、Vue中响应式原理 八、数据代理 九、methods配置项 十、Vue中的事件处理 十一、Vue中的键盘事件 十二、计算属性 十三、监视属性watch 十四、绑定Class样式…

数据库构建中的三范式设计(附SQL实例说明)

数据库构建中的三范式(附SQL实例说明) 设计数据库时遵循三范式(1NF、2NF、3NF)是关系型数据库设计中用于减少数据冗余、提高数据一致性的理论基础。 第一范式:任何一张表必须有主键,每个字段原子性不可再分…

主控制文件(项目的开始)食用顺序_3

遇到问题加QQ群聊 群主在线解答 点击加入群聊【星辰开发】 该文档 如有更新 会直接修改此文档 目前版本 2024.4.23 本项目需求 控制文件 尽量不修改 代码要简介快速 控制文件代码如下 from flask import Flask, request# 三种事件扩展包 自行创建 import Group # 群聊事…

玩转微服务-SonarQube

这里写目录标题 第一节 SonarQube1.1 简介1.2 四个组成部分1.2.1 SonarQube服务器1.2.2 SonarQube数据库1.2.3 插件1.2.4 Scanner 1.3 工作流程 第二节 SonarQube的安装2.1 安装2.2 插件 第三节 P3C规范3.1 简介3.2 SonarQube 配置 P3C规范3.3 IDEA配置 P3C规范 第四节 Maven项…

Mybatis-动态SQL

黑马程序员JavaWeb开发教程 文章目录 一、Mybatis-XML映射文件1、XML映射文件&#xff08;1&#xff09;规范&#xff08;2&#xff09;MybatisX 二、Mybatis-动态SQL-if1、动态SQL2、 标签<if><where>3、示例 三、Mybatis-动态SQL-foreach根据 id 批量删除员工1、…

踩坑npm install qrcodejs2和crypto-js

在VSCode输入以下命令时&#xff1a; npm run dev 报错找不到crypto-js依赖。 通过以下命令安装crypto-js依赖。 npm install --save crypto-js 然后再次运行启动命令继续报错&#xff0c;这次报错找不到qrcodejs2依赖&#xff0c;通过以下命令安装qrcodejs2依赖&#xff…

iOS - 多线程-atomic

文章目录 iOS - 多线程-atomic1. 源码分析1.1 get方法1.2 set方法 2. 一般不使用atomic的原因 iOS - 多线程-atomic atomic用于保证属性setter、getter的原子性操作&#xff0c;相当于在getter和setter内部加了线程同步的锁可以参考源码objc4的objc-accessors.mm它并不能保证使…

刚刚,ChatGPT重大更新!GPT-4更加聪明,已成毕业论文撰写润色修改最佳利器!

今天ChatGPT Plus版本做了升级。GPT-4增强了记忆功能&#xff0c;能够通过你的多次对话了解你的意图&#xff0c;并提供合适的回应&#xff0c;总结一句话就是&#xff1a;更加懂你&#xff01; ChatGPT到底能干什么&#xff1f;我简单总结一下&#xff1a; 翻译&#xff1a;中…

电商技术揭秘三十一:智能风控与反欺诈技术

相关系列文章 电商技术揭秘相关系列文章合集&#xff08;1&#xff09; 电商技术揭秘相关系列文章合集&#xff08;2&#xff09; 电商技术揭秘二十八&#xff1a;安全与合规性保障 电商技术揭秘二十九&#xff1a;电商法律合规浅析 电商技术揭秘三十&#xff1a;知识产权保…

C++必修:从C到C++的过渡(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 贝蒂的主页&#xff1a;Betty’s blog 1. 缺省参数 1.1. 缺省参数的使用 缺省参数是声明或定义函数时为函数的参数指定…

Java基础之JVM对象内存分配机制简介

一 对象内存分配 1.1 运行时数据区域 1.2 常见java应用启动JVM参数&#xff1a; -Xss&#xff1a;每个线程的栈大小(单位kb)-Xms&#xff1a;堆的初始大小&#xff0c;默认物理内存的1/64,示例&#xff1a;-Xms:4g -Xms:10m-Xmx&#xff1a;堆的最大可用大小&#xff0c;默认物…

(Java)队列

一.概念 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO(First In First Out) 入队列&#xff1a;进行插入操作的一端称为队尾&#xff08;Tail/Rear&#xff09; 出队列&#xff1a;进行删…

数据的正态性检验

正态性检验 判断 pd.Series 数据是否符合正态分布&#xff0c;可以采用以下几种方法。 计算偏度 偏度&#xff08;Skewness&#xff09;是衡量数据分布对称性的统计量。如果偏度大于 0&#xff0c;则数据分布是右偏的&#xff08;正偏斜&#xff09;&#xff1b;如果偏度小于…

时尚新选择,小塔RFID技术重塑样衣管理

在时尚领域&#xff0c;样衣是创意与工艺的完美结合&#xff0c;每一件都承载着设计师的心血与期待。然而&#xff0c;当这些珍贵的样版在传统的管理体系下流转时&#xff0c;样版管理成为一个令人头疼的问题。手动记录、盘点和样板追溯成为常态&#xff0c;但这种方式容易出错…

亚远景科技-ASPICE评估师等级、ASPICE评估师培训和ASPICE评估项目等级简介

1. ASPICE评估师等级&#xff1a; ASPICE评估师等级主要包括助理评估师、主任评估师、首席评估师和评估师导师。这些等级反映了评估师在执行ASPICE评估项目时的经验和专业能力。助理评估师即小PA&#xff0c;主任评估师即CA,首席评估师即大PA。每一个等级都需要经过严格的培训…