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

【设计模式】Java 设计模式之桥接模式(Bridge) 本文概述了桥接设计模式的核心原理和应用场景。桥接模式通过分离抽象部分和实现部分,使得两者能够独立变化,从而提升了系统的灵活性和可扩展性。它特别适用于那些需要在多个维度上进行变化,或者要求抽象和实现独立演进的场景。实现桥接模式时,需明确抽象与实现的关系,设计稳定的抽象接口,并保持实现细节的独立性。尽管桥接模式可能增加系统的复杂性并带来一定的性能损失,但其带来的灵活性通常能够弥补这些不足。展望未来,桥接模式将继续在软件开发中发挥重要作用,结合其他技术和设计模式,共同构建高效、灵活且可靠的系统架构。 阅读详情

桥接模式 (Bridge Pattern)

桥接模式是一种结构型设计模式,它的核心思想是将抽象部分与实现部分分离,使它们可以独立变化。这种模式通过组合而不是继承的方式来扩展功能,从而减少类之间的耦合度。


1. 模式结构

桥接模式的结构包括以下角色:

  • Abstraction(抽象类): 定义高层抽象部分,包含对实现部分(Implementor)的引用。
  • RefinedAbstraction(扩展抽象类): 继承抽象类,为高层部分提供更加具体的功能。
  • Implementor(实现接口): 定义实现类的接口,提供底层操作的抽象。
  • ConcreteImplementor(具体实现类): 实现具体的实现接口,定义底层操作的具体实现。

2. 桥接模式的优点

  1. 分离抽象与实现: 抽象部分和实现部分独立变化,降低耦合度。
  2. 扩展性强: 新增抽象部分或实现部分时无需修改已有代码,符合开闭原则。
  3. 提高灵活性: 可以动态地替换实现部分。

3. 桥接模式的缺点

  1. 增加复杂性: 分离抽象与实现后,会引入额外的类和接口。
  2. 过度设计: 如果系统不需要抽象与实现的独立扩展,使用桥接模式可能会导致不必要的设计复杂性。

4. 桥接模式的实现

示例场景:设备与遥控器

我们以“设备(电视、收音机)”和“遥控器(基础遥控器、高级遥控器)”为例,实现桥接模式。

1) 定义实现接口

定义设备的通用操作接口。

// 实现接口
public interface Device {
    void turnOn();
    void turnOff();
    void setVolume(int percent);
    int getVolume();
}
2) 实现具体设备类

具体设备类实现 Device 接口。

// 电视实现类
public class TV implements Device {
    private int volume = 50;

    @Override
    public void turnOn() {
        System.out.println("TV is turned on.");
    }

    @Override
    public void turnOff() {
        System.out.println("TV is turned off.");
    }

    @Override
    public void setVolume(int percent) {
        this.volume = percent;
        System.out.println("TV volume set to " + percent + "%.");
    }

    @Override
    public int getVolume() {
        return volume;
    }
}

// 收音机实现类
public class Radio implements Device {
    private int volume = 30;

    @Override
    public void turnOn() {
        System.out.println("Radio is turned on.");
    }

    @Override
    public void turnOff() {
        System.out.println("Radio is turned off.");
    }

    @Override
    public void setVolume(int percent) {
        this.volume = percent;
        System.out.println("Radio volume set to " + percent + "%.");
    }

    @Override
    public int getVolume() {
        return volume;
    }
}
3) 定义抽象类

定义遥控器的抽象类,并持有设备接口的引用。

// 抽象遥控器
public abstract class RemoteControl {
    protected Device device;

    public RemoteControl(Device device) {
        this.device = device;
    }

    public void turnOn() {
        device.turnOn();
    }

    public void turnOff() {
        device.turnOff();
    }

    public void setVolume(int percent) {
        device.setVolume(percent);
    }
}
4) 实现具体遥控器

扩展遥控器的功能。

// 基础遥控器
public class BasicRemote extends RemoteControl {
    public BasicRemote(Device device) {
        super(device);
    }

    public void mute() {
        System.out.println("Muting the device.");
        device.setVolume(0);
    }
}
5) 客户端代码

通过桥接模式实现动态组合。

public class Client {
    public static void main(String[] args) {
        // 使用 TV 和基础遥控器
        Device tv = new TV();
        RemoteControl tvRemote = new BasicRemote(tv);

        tvRemote.turnOn();
        tvRemote.setVolume(70);
        ((BasicRemote) tvRemote).mute();
        tvRemote.turnOff();

        // 使用 Radio 和基础遥控器
        Device radio = new Radio();
        RemoteControl radioRemote = new BasicRemote(radio);

        radioRemote.turnOn();
        radioRemote.setVolume(50);
        ((BasicRemote) radioRemote).mute();
        radioRemote.turnOff();
    }
}
运行结果:
TV is turned on.
TV volume set to 70%.
Muting the device.
TV volume set to 0%.
TV is turned off.
Radio is turned on.
Radio volume set to 50%.
Muting the device.
Radio volume set to 0%.
Radio is turned off.

5. 桥接模式的应用场景

  1. 多维度扩展:
    当一个类有两个或多个维度的变化时,比如“形状”和“颜色”、“设备”和“遥控器”等。

  2. 避免多层继承:
    使用桥接模式可以减少类的数量,避免因为每种功能扩展都使用继承而导致的类爆炸问题。

  3. 需要动态替换实现部分:
    在运行时需要动态更换实现类时,桥接模式可以提供灵活的组合方式。


6. 桥接模式的优缺点对比

优点:
  • 分离抽象和实现: 使两者可以独立变化,增强系统的灵活性。
  • 提高扩展性: 新增抽象或实现都很容易。
  • 运行时动态组合: 可以在运行时改变实现部分,满足动态需求。
缺点:
  • 增加复杂性: 系统需要维护抽象层和实现层的多个类和接口。
  • 可能造成过度设计: 如果变化维度较少,桥接模式可能显得不必要。

7. 桥接模式与其他模式的区别

模式主要用途与桥接模式的区别
适配器模式将一个接口转换为另一个接口适配器模式用于接口兼容问题,而桥接模式用于解耦抽象和实现。
装饰器模式动态地为对象添加新功能装饰器模式关注功能增强,桥接模式关注分离抽象和实现。
抽象工厂模式创建相关的对象家族抽象工厂模式注重产品家族的创建,桥接模式注重抽象和实现解耦。

8. 总结

桥接模式是一种灵活、优雅的结构型设计模式,它通过组合的方式将抽象与实现解耦,适合多维度变化的系统。它不仅提高了系统的扩展性,还减少了类的数量,避免多层继承导致的类爆炸问题。

在实际开发中,当系统需要应对复杂的变化时,桥接模式是一个非常有效的选择。

【重温设计模式】桥接模式及其Java示例 在桥接模式中,我们看到了设计模式的力量,也看到了Java语言的灵活性和强大性。我们通过桥接模式,将抽象和实现分离,使得两者可以独立地变化。这样的设计,让我们的代码更加灵活,更易于扩展。然而,桥接模式并非万能的。它的使用需要我们根据实际情况和需求,恰当地选择和使用。桥接模式的优点是分离了抽象部分和实现部分,使得我们可以独立地改变或者扩展抽象部分和实现部分。但是,它的缺点也是显而易见的。由于它将抽象和实现分离,增加了系统的理解和设计难度。对于初学者来说,可能需要花费更多的时间和精力去理解和掌握这种模式。 阅读详情

相关推荐

【Java设计模式】Java设计模式之(二十)桥接模式(Bridge Pattern)

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

No8g攻城狮的博客 772

Java设计模式:桥接模式

桥接(Bridge)模式属于结构型设计模式。通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。该UML结构图如下:主要角色:(1)Abstraction:抽象类。(2)RefinedAbstraction:扩充抽象类。(3)Implementor:实现类接口。(4)ConcreteImplementor:具体实现类 。场景: 一个甜品店,售卖的食品有蛋糕、奶茶和牛奶,但

原名:@程序员大禹 5157

实战复盘:如何用ATE(自动测试设备)搞定一颗MCU的功能测试全流程

本文详细解析了如何利用ATE(自动测试设备)完成MCU功能测试的全流程,涵盖测试需求分析、测试向量生成、ATE测试程序开发及调试实战。通过真实案例分享,帮助工程师高效解决芯片测试中的常见问题,提升Functional Test的准确性和效率。

weixin_30872157的博客 485

Java中的桥接模式(Bridge Pattern)

Java中的桥接模式(Bridge Pattern)

sanmansan的博客 1129

瑞芯微RK3576开发板实战:6TOPS NPU如何加速你的AIoT项目(附性能测试)

本文以瑞芯微RK3576开发板为核心,深入探讨其6TOPS NPU在AIoT项目中的实战应用。通过详细的性能测试对比,展示了NPU如何将AI模型推理速度提升15倍以上,并大幅降低CPU负载。文章涵盖从环境搭建、模型转换优化到多屏异显与系统级调优的全流程,为开发者提供了将硬件算力转化为实际项目加速效果的完整指南。

oauth7security的博客 820

技术前沿:半导体前道检测和量测设备修复技术

半导体前道检测设备是目前除光刻机外,国产渗透率较低的环节之一,近年来我国初步实现国产突破。前道检测相对后道检测环节壁垒更高,国内多家涉及后道测试,涉及前道检测和中道检测相对较少。

VOMMA的博客 4543

设计模式-桥接模式

结构型设计模式结构型模式主要总结了一些类和对象组合在一起的经典结构,这些经典结构可以解决对应特定场景的问题.一共包括七种:代理模式、桥接模式、装饰者模式、适配器模式、门面(外观)模式、组合模式、和享元模式。

hey_lie的博客 375

Delphi解决 openssl DLL 与 Indy 的SSL/TLS 连接问题

​ 使用 SSL 连接时出错。错误 1409442E:SSL 例程:ssl3_read_bytes:tlsv1 警报协议版本 由于我使用的是最新版本的Indy,根据Delphi Praxis 上的此线程,这种情况不应该发生。事实证明,不知何故,一个非常旧版本的 openssl DLLlibeay32.dll和ssleay32.dll已被放置在我计算机上的 sarch 路径中(版本 1.0.0e)。

Delphi开发局QQ群:32422310 2494

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

桥接模式(Bridge Pattern)的介绍、应用场景、优缺点以及代码示例

weixin_70044963的博客 465

目标检测YOLO实战应用案例100讲-基于数据融合的SAR图像中海上目标检测与跟踪(中)

本文使用的数据集为欧空局(European Space Agency, ESA)提供的Sentinal-1 数据集,Sentinel-1是欧洲“哥白尼计划”的SAR卫星机群,主要是用于陆地和海 洋服务的极地轨道全天候昼夜雷达成像任务[ 34]。Sentinel-1A于2014年4月3日发 射升空,Sentinel-1B于2016年4月25日发射升空,每颗卫星都携带C波段SAR, 共同提供地球表面的全天候、昼夜图像。

qq_36130719的博客 356

【嵌入式Linux驱动开发】二十四、Linux I2C 驱动上手尝试

  人的前程关于眼界、关乎格局。   志之所趋,无远弗届,穷山复海不能限也;   志之所向,无坚不入,锐兵精甲不能御也。 一、I2C驱动框架简介   Linux内核将 I2C 驱动分为两部分: ①、 I2C 总线驱动, I2C 总线驱动就是 SOC 的 I2C 控制器驱动,也叫做 I2C 适配器驱动。 ②、 I2C 设备驱动, I2C 设备驱动就是针对具体的 I2C 设备而编写的驱动。 1....

悟已往之不谏 知来者之可追 1068

Java设计模式(九)结构型- 桥接模式 Bridge Pattern(史上最全桥接模式)与使用场景以及优缺点

桥接模式

移动端开发与最新技术 426

Obsidian与RAG:知识管理的未来之战

摘要: 本文对比了传统RAG、Obsidian和llm-wiki-skill三种知识管理方案。传统RAG依赖查询时临时检索,知识无法积累;Obsidian需人工整理,成本高但结构化强;llm-wiki-skill通过AI在摄入时自动编译知识为结构化Wiki,实现持续增值。核心差异在于知识处理时机——llm-wiki-skill将"查询时检索"转变为"摄入时编译",通过三层Markdown结构(sources/concepts/entities)和自动双向链接构建可进化

ZhangJiqun&191cm&85kg 619

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

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

微笑听雨 2838

AI摄影师:自动构图与修图算法设计

AI摄影师:自动构图与修图算法设计​ ,人工智能,计算机视觉,大模型,AI,AI 摄影师的核心能力体现在两方面:自动构图(通过算法优化画面元素布局)与智能修图(自动调整光影、色彩、细节)。例如,手机摄影中的 “AI 构图建议” 功能可实时框选最佳拍摄区域,修图软件中的 “一键增强” 能在 0.1 秒内完成专业级调色,这些都依赖于计算机视觉与深度学习的深度融合。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 16万+

精雕软件(JDpaint) 5.5 绿色版

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

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

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

Meteors.的博客 1224

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

ShuSheng007的程序人生 5179

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

JAVA设计模式之 桥接模式【Bridge Pattern】

一、概述 将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式。二、适用场景 处理多维度变化。 业务场景:某功能为将数据库中的数据转换成多种文件格式,例如txt、xml、pdf等格式,同时需要支持多种不同类型的数据库的读取。便可使用桥接模式对其进行设计。 这里的维度有两个 分别为:不同的文件格式

小吕丶Code阶区 5241

桥接模式 Bridge Pattern

的理解出了问题。

DachuiLi的博客 1071

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

桥接模式是一种结构型设计模式,如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合“单一职责原则”。与多层继承方案不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系类似一条连接两个独立继承结构的桥,故名桥接模式。桥接模式用一种巧妙的方式处理多层继承存在的问题,用抽象关联取代了传统的多层继承,将类之间的静态继承关系转换为动态的对象组合关系,使得系统更加灵活,并易于扩展,同时有效控制了系统中类的个数。

ddm 1838

桥接模式(BridgePattern)

将抽象部分与实现部分分离,使它们都可以独立的变化。在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。实现系统可能有多个角度分类,每一种角度都可能变化。把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。抽象类依赖实现类。比如猪八戒从天蓬元帅转世投胎到猪,转世投胎的机制将尘世划分为两个等级,即:灵魂和肉体,前者相当于抽象化,后者相当于实现化。生灵通过功能的委派,调用肉体对象的功能,使得生灵可以动态地选择。

u013115157的博客 897

Java 桥接模式(Bridge Pattern)

桥接模式通过引入一个中间层的桥接接口(或抽象类),将原本的抽象部分与其实现部分分开。这样,抽象层与实现层的扩展不再相互影响,从而降低系统的复杂性并提高可扩展性。

qq_35082497的博客 969

Java设计模式——桥接模式【Bridge Pattern】

Java设计模式、桥接模式、Bridge Pattern

scorpio的博客 1796

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

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

ling_zhi_xin的博客 1102

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

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

遇见伯灵说的博客 1051

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

桥接模式 定义 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 类型 结构型。 例子 这里举银行的例子,中国有很多种类型的银行,各种银行又有很多种不同的账号类型。 多重继承 桥接模式 从上面的两个图,可以看出桥接模式相较于多重继承的优势,当银行种类很多,账号类型也很多时,桥接模式就更加方便了,大家可以自己好好体会体会。 Account接口(账号)。 package com.kaven....

kaven 1955
上一篇: Java设计模式 八 适配器模式 (Adapter Pattern)
下一篇: Java设计模式 十 装饰模式 (Decorator Pattern)
十方来财
十方来财 新星创作者: 编程框架技术领域 新星创作者: 编程框架技术领域
博客等级 码龄14年 8358粉丝 346原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十方来财

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值