【设计模式】桥接模式

【Java设计模式】Java设计模式之(二十)桥接模式(Bridge Pattern) 本文目录 一、桥接模式介绍 1.1 含义 1.2 适用场景 1.3 主要解决 1.4 应用实例 1.5 优缺点 二、桥接模式实现 2.1 类图 2.2 角色分析 2.3 代码实现 三、源码分析 这种类型的设计模式属于结构型模式。 一、桥接模式介绍 1.1 含义 桥接模式即将抽象部分与它的实现部分分离开来,使他们都可以独立变化。 桥接模式将继承关系转化成关联关系,它降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量。 将抽象部分与他的实现部分分离这句话不是很好理解 阅读详情

5.4 桥接模式

5.4.1 概述

现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系:

在这里插入图片描述

我们可以发现有很多的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类。

试想,在一个有多种可能会变化的维度的系统中,用继承方式会造成类爆炸,扩展起来不灵活。每次在一个维度上新增一个具体实现都要增加多个子类。为了更加灵活的设计系统,我们此时可以考虑使用桥接模式。

定义:

​ 将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。

5.4.2 结构

桥接(Bridge)模式包含以下主要角色:

  • 抽象化(Abstraction)角色 :定义抽象类,并包含一个对实现化对象的引用。
  • 扩展抽象化(Refined Abstraction)角色 :是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。
  • 实现化(Implementor)角色 :定义实现化角色的接口,供扩展抽象化角色调用。
  • 具体实现化(Concrete Implementor)角色 :给出实现化角色接口的具体实现。

5.4.3 案例

【例】视频播放器

需要开发一个跨平台视频播放器,可以在不同操作系统平台(如Windows、Mac、Linux等)上播放多种格式的视频文件,常见的视频格式包括RMVB、AVI、WMV等。该播放器包含了两个维度,适合使用桥接模式。

类图如下:

在这里插入图片描述

代码如下:

//视频文件
public interface VideoFile {
    void decode(String fileName);
}

//avi文件
public class AVIFile implements VideoFile {
    public void decode(String fileName) {
        System.out.println("avi视频文件:"+ fileName);
    }
}

//rmvb文件
public class REVBBFile implements VideoFile {

    public void decode(String fileName) {
        System.out.println("rmvb文件:" + fileName);
    }
}

//操作系统版本
public abstract class OperatingSystemVersion {

    protected VideoFile videoFile;

    public OperatingSystemVersion(VideoFile videoFile) {
        this.videoFile = videoFile;
    }

    public abstract void play(String fileName);
}

//Windows版本
public class Windows extends OperatingSystemVersion {

    public Windows(VideoFile videoFile) {
        super(videoFile);
    }

    public void play(String fileName) {
        videoFile.decode(fileName);
    }
}

//mac版本
public class Mac extends OperatingSystemVersion {

    public Mac(VideoFile videoFile) {
        super(videoFile);
    }

    public void play(String fileName) {
		videoFile.decode(fileName);
    }
}

//测试类
public class Client {
    public static void main(String[] args) {
        OperatingSystem os = new Windows(new AVIFile());
        os.play("战狼3");
    }
}

好处:

  • 桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。

    如:如果现在还有一种视频文件类型wmv,我们只需要再定义一个类实现VideoFile接口即可,其他类不需要发生变化。

  • 实现细节对客户透明

5.4.4 使用场景

  • 当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。
  • 当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。
  • 当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时。避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。

本文章参考B站 黑马程序员Java设计模式详解, 23种Java设计模式(图解+框架源码分析+实战),仅供个人学习使用,部分内容为本人自己见解,与黑马程序员无关。

QWEN 2.5模型结构解析与代码解读 对Qwen2.5大模型的代码进行研究 阅读详情

相关推荐

[cadence]Allegro STEP-3D模型导入、匹配、导出的方法及注意事项

如果 Avaliable里面没有和symbols对应的文件,说明没有对应的3D模型,这时候需要在你的step路径下创建y与 .dra 封装文件相同名称的。选择好 Output file 和 name 之后呢,点击 Export。首先打开Setup - Step Package Mapping。注意:路径中不能有中文名称,有的话你会发现不能导出,也不会报错。在路径下将下载或者自己做的 3D模型文件改名之后,重新打开。可在View -> 3D View。

LuDvei的博客 2万+

设计模式-桥接模式-bridge pattern

桥接模式(Bridge Pattern)是一种结构性设计模式,用于将抽象部分与其实现部分分离,使它们可以独立地变化。这种模式通过定义一个桥接接口,将实现的类和抽象的类解耦,从而能够独立地扩展抽象类和实现类。抽象(Abstraction):扩展抽象(Refined Abstraction):实现化(Implementor):具体实现化(Concrete Implementor):首先,定义实现化接口: 接着,创建具体的实现化类: 然后,定义抽象类: 接着,扩展抽象类: 最后,客户端代码使用桥接模式: 1.3.

wesigj的博客 2823

STM32F407 UART4串口DMA收发实战:告别频繁中断,用空闲中断+DMA搞定不定长数据

本文详细介绍了STM32F407 UART4串口结合DMA和空闲中断实现高效不定长数据收发的实战方案。通过DMA硬件级数据搬运和空闲中断智能帧检测,显著降低CPU占用率,提升通信效率,适用于工业传感器数据采集和智能设备通信场景。

weixin_42631411的博客 154

设计模式之桥接模式(Bridge Design Pattern)

桥接模式(Bridge Design Pattern),也叫作桥梁模式。在 GoF 的《设计模式》一书中,桥接模式是这么定义的:“Decouple an abstraction from its implementation so that the two can vary independently。”翻译成中文就是:“将抽象和实现解耦,让它们可以独立变化”。 桥梁模式从名字来看很具象,但从定义来看又很抽象难懂。对于初学设计模式,桥梁最难理解的一种模式之一。 本文我们从一个飞机的例子慢慢演化,来理解桥

xjj1314的专栏 760

Autosar诊断实战系列07-Dcm之0x19 06扩展数据配置及工程问题讨论

19 06扩展数据如何配置?如果某DTC没有出现过故障扩展数据该如何响应?

initiallizer的博客 1703

R语言dplyr包recode函数、recode_factor函数数值或因子替换实战

R语言dplyr包recode函数、recode_factor函数数值或因子替换实战 目录 R语言dplyr包recode函数、recode_factor函数数值或因子替换实战 #导入dplyr包 #recode函数进行数值替换 #recode_factor函数对因子变量进行替换 #导入dplyr包 install.packages("dplyr") # Install & load dplyr library("dpl.

data+scenario+science+insight 1588

设计模式之桥接模式BridgePattern(十二)

桥接模式(bridge pattern) 的定义是:将抽象部分与它的实现部分分离,使它们都可以独立地变化。桥接模式用一种巧妙的方式处理多层继承存在的问题,用抽象关联来取代传统的多层继承,将类之间的静态继承关系转变为动态的组合关系,使得系统更加灵活,并易于扩展,有效的控制了系统中类的个数 (避免了继承层次的指数级爆炸)。

徐泗空的博客 836

天猫精灵设备拆机及系统分析

我手头的这个天猫精灵型号为TG_X1,黑色天猫精灵AI助手,拆解没有多少难度,但需要注意连接线的问题。具体的拆机过程可以参见:http://www.geekifix.com/wp/archives/415.html注意一点就是,天猫精灵的主板的位置,位于音频按键的底部,也就是顶端,而拆解是从电源的位置从低到顶进行拆机;拆机后,看到主控板的信息如下:主控型号:联发科 MT8516MT8516支持四核...

LeeKwen的专栏 3万+

设计模式桥接模式(BridgePattern)

核心模块:Abstracttion抽象类、RefinedAbstraction扩充抽象类、Implementor实现类接口、ConcreteImplementor具体实现类 所有代码请访问:git@code.aliyun.com:289804201/PatternLearn.git 使用场景:多维度耦合的情况,不希望用继承的情况; 优点:减少了类的数量和和代码量,避免

didiao11300的专栏 297

把数据库算力拉满的 ABAP CDS Table Function:从语法、权限到可运行样例的全景解析

文章摘要: 本文针对ABAP开发者探讨了CDS Table Function的应用场景与实现细节。当CDS View无法处理复杂计算(如窗口函数、递归等)时,可通过Table Function将逻辑下推到HANA数据库执行。关键点包括:1)CDS实体声明与AMDP实现的协作关系;2)多租户环境下的Client处理机制(@ClientHandling.type注解);3)激活与传输的阶段性特点可能导致的"暂不可用"问题;4)基于SFLIGHT的完整示例,展示如何定义Client依赖函数、实

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 299

RK3568/RK3588 + YT 9215交换机芯片,MAC TO MAC 调试记录

原来的方案是rk3568 gmac 直接接phy,phy 接 switch 芯片,只是把交换芯片当交换用,驱动方面基本不用开发,但是要做vlan 那么必须涉及交换芯片的开发。选择裕太微有两个方面的原因:1.国产化替代2.可获得原厂技术支持3.目前已经完成 两个gmac 口交换芯片的配置,实现vlan,内部交换,两个光口可正常通信。

Nyiragongo的博客 1万+

23种设计模式——桥接模式 (Bridge Pattern)详解

本文介绍了23种经典设计模式之——桥接模式(Bridge Pattern)的使用及说明

Meteors.的博客 1224

基于深度学习的树木种类识别

本文介绍了基于深度学习的树木种类识别技术。我们将通过深度学习模型和图像处理技术实现对树木的自动识别与分类。首先,我们将介绍深度学习的基本原理和相关算法。接着,我们将详细说明树木种类识别的数据准备、模型构建和训练过程。最后,我们将给出代码示例,帮助读者深入了解和实践该技术。

一键难忘的博客 2315

Java 设计模式之桥接模式(Bridge Pattern)

桥接模式(Bridge Pattern)是一种用于将抽象部分与其实现部分分离的结构型设计模式。这种模式通过组合关系而不是继承关系来连接抽象与实现,使代码更具扩展性和维护性。桥接模式的核心思想是将抽象和实现解耦,使得两者可以独立变化。桥接模式(Bridge Pattern)是一种结构型设计模式,旨在将抽象部分与其实现部分分离,从而使两者可以独立地变化。桥接模式通过组合关系代替继承关系,将抽象和实现解耦,使代码更具扩展性和维护性。

微笑听雨 2836

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

设计模式之桥接模式BridgePattern

设计模式之桥接模式BridgePattern 代码下载 BridgePattern 1.概念 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 这个概念有点抽象,桥接顾名思义,通过搭桥的方式让本不想关联的对象互相调用。 可以联想牛郎织女鹊桥会。 2.类图 1). IDAL 与 IBLL两个类相互依赖,具体的实现DAL1(或DAL2)与BLL实现相互独立互不影响。 2)....

云计算? 154

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

秒懂设计模式之桥接模式(Bridge Pattern)

前言 人在IT江湖飘,不懂设计模式咋装X? 定义 桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interfce)模式。 使用场景 顾名思义,桥我们大家都熟悉,就是用来将河的两岸联系起来。此处的桥是要将抽象部分与实现部分联系起来。有的同学要抱怨了:尼玛,你本来是为了解释不熟悉的事物,结果又引入两个...

ShuSheng007的程序人生 5179

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

JAVA设计模式之桥接模式

转自http://www.kongzid.com/archives/design9,桥接模式(Bridge Pattern),又称为柄体(Handle and Body)模式或接口(Interface)模式。将抽象部分与它的实现分离,并不是说让抽象类与其派生类分离,而是用抽象类和它的派生类用来实现自己的对象。(将抽象化(Abstraction)与实现化Implementation)脱耦,使得二者可以独立地变化) 从众多的事物中抽取出共同的、本质...

孔子说 965

C++设计模式——桥接模式(Bridge Pattern)

C++设计模式——桥接模式(Bridge Pattern) 微信公众号:幼儿园的学霸 目录 文章目录C++设计模式——桥接模式(Bridge Pattern)目录引言定义定义结构代码示例总结桥接模式和策略模式桥接模式和适配器模式适用场景优缺点参考资料 引言 假如有三个品牌的手机vivo,oppo和小米,如果手机手机壳一体生产,会是这样的: 对应到相应的类中,将是1+3+6=10个有继承关系的类,如果这时再加一个华为手机,无疑是要多增加3个类,会带来类的急剧增长。 如果手机手机壳分开生产,然后按需搭配,

leonardohaig的博客 1411

设计模式:桥接模式(Bridge Pattern)

桥接模式是一种结构型设计模式,它的主要作用是将抽象部分与实现部分分离,使它们能够独立变化。换句话说,就是把“抽象”和“实现”放到两个独立的类层次中,通过组合而不是继承来连接它们。

TechNomad的博客 1071

[Unity 设计模式]桥接模式(BridgePattern)

1.前言 继上一讲IOC模式的基础上继续本讲桥接模式,笔者感觉桥接模式是23种设计模式中桥接模式是最好用但也是最难理解的设计模式之一,23中设计模式就好武侠剧中一本武功秘籍,我们在工作过程中想要熟练运用其中的每一种设计模式就好比跟高手过招想要能运用好武侠秘籍中的每一招每一式,并且能随着对手出招的不同我们能随机应变对应的招数,这就要求我们对每一种设计模式都理解的非常深刻才能运用自如,打出组合拳的效

bmw601055的博客 521

23种设计模式之桥接模式(Bridge Pattern)

本篇文章将23种设计模式中的桥接模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 2万+

设计模式 桥接模式(Bridge Pattern)

这种模式的主要目的是解耦一个类的接口与其实现部分,从而可以更加灵活地给一个对象配置不同的功能实现。这提高了系统的可扩展性,因为你可以独立地增加新的实现类或抽象类。当调用Refined Abstraction的方法时,它将请求转发给它的Implementor对象。在创建时,将一个具体的Implementor实例传递给Refined Abstraction。Implementor执行具体的实现,并返回结果给Refined Abstraction。创建 支持的 接口 抽象实现 原有的 形状实现。

ling_zhi_xin的博客 1102

【JAVA设计模式】之桥接模式(BridgePattern)

桥接模式的作用是将两样东西连接起来,比如桥梁把河的两岸连接起来 桥接模式把“类的功能层次结构”和“类的实现层次结构”连接起来 类的层次结构 类的功能层次:父类通过定义抽象方法来定义接口API 类的实现层次:子类通过实现具体方法来实现接口API 示例程序 相关类一览表 类的层次 类名 描述 功能层 Express 快递寄件 功能层 EnhanceExpress (寄件)增加代收功能 实现层 ICompany 快递公司 实现层

兵临城下的博客 357

设计模式教程:桥接模式(Bridge Pattern)

将抽象与实现分离,使得它们可以独立变化。常用于避免多重继承。

遇见伯灵说的博客 1051

【设计模式】桥接模式(Bridge Pattern)详解

桥接模式通过将抽象与实现分离,解决多维度变化导致的继承爆炸问题。以跨平台消息系统为例,将消息类型(抽象)与发送方式(实现)解耦,通过组合而非继承实现灵活扩展。核心角色包括抽象、扩展抽象、实现接口和具体实现。该模式优点在于消除多维继承、独立扩展维度,但设计复杂度较高。适用于存在多个变化维度的场景,如JDBC驱动设计。与适配器、装饰者模式不同,桥接模式专注于多维度独立演化。

经天纬地,格物致理 1062

设计模式学习笔记十二:桥接模式(Bridge Pattern)

设计模式学习笔记十二:桥接模式(Bridge Pattern)     1.概述     桥接模式(Bridge),将抽象部分与它的实现部分分离,是他们都可以独立的变化。什么叫抽象与它的实现分离,这并不是说,让抽象类与其他派生类分离,因为这没有任何意义。实现指的是抽象类和它的派生类用来实现自己的对象。     下面我们看桥接模式的结构图:     (1).Abs

AlbenXie的博客 610
上一篇: 【设计模式】装饰者模式
BugMaker.Chovy
博客等级 码龄6年 118粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值