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

TCP/IP协议栈之LwIP(三)---网际寻址与路由(IPv4 + ARP + IPv6)

一、网际寻址原理 当网络设备地址总数并不是很多的情况下,有了唯一地址(比如MAC地址)就可以定位相互通信的主体。然而,当地址总数越来越多时,如何高效地从中找出通信的目标地址将成为一个重要的问题。为此人们发现地址除了具有唯一性还需要具有层次性。MAC地址虽然具有唯一性,但没有层次性,也即当网络设备增加到一定程度,需要将网络分成多个数据链路时,MAC地址无法跨链路寻址,是真正负责最终通信的地址。要实现跨局域网的网际寻址,就要靠具有层次性的网络IP地址实现了。

流云 6819

Java中的桥接模式(Bridge Pattern)

Java中的桥接模式(Bridge Pattern)

sanmansan的博客 1129

VS Code + Codex 在 WSL 中使用的正确姿势

Codex 登录只能在本地完成。文件仍可通过 UNC 路径访问 WSL → 本地 Codex 就能照常工作。避免在 WSL 内重复安装/登录 Codex 扩展。

yangguangwuyue的博客 9829

SAP中贸易伙伴的应用原理简析

公司也称为贸易伙伴,是出具合并报表的组织单位,可以为客户和供应商分配公司(贸易伙伴),用于识别集团内关闻公司间的业务往来,在编制合并报表时进行往来账务的计算处理。 如下图某贸易伙伴公司(关联方名称G0059)在我方公司的SAP系统中有多重身份(即是供应商,又是客户)。那么在我方公司SAP系统中建立起公司(贸易伙伴),并关联到供应商和客户主数据中。之后,就可以通过G0059这个贸易伙伴名称来识别与该贸易伙伴间的往来业务。 相应的配置设定如下: 定义公司(贸易伙伴或关联方) 会计凭证中会

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 9815

设计模式-桥接模式

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

hey_lie的博客 375

Pytorch的一小步,昇腾芯片的一大步

相信在AI圈的人多多少少都看到了最近的信息:PyTorch最新2.1版本宣布支持华为昇腾芯片!

机器学习-深度学习-图像处理-opencv-段子 5240

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

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

weixin_70044963的博客 465

使用TinyProxy搭建代理服务器

背景 办公电脑所在网络无法连接外网,机房服务器可以连接外网,通过服务器代理上网; 一、CentOS下TinyProxy安装–搭建代理服务器 TinyProxy是个轻量级简单的HTTP/HTTPS代理程序,GitHub和官网,安装方式这里主要介绍两种 CentOS下yum安装,参考:TinyProxy安装 Docker安装 先安装docker环境yum install docker -y 二、Win10下使用 ...

椰汁菠萝 1万+

Exposure Fusion

MertensTMO原理详解: 文章:2007年Exposure Fusion 论文链接:http://ntp-0.cs.ucl.ac.uk/staff/j.kautz/publications/exposure_fusion.pdf 论文代码:C版本:https://github.com/JawThrow/ExposureFusion python版本:https://github.com/lzocro/Exposure-Fusion matlab版本:https://github.com/Mericam

大长腿不解释 1652

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

桥接模式

移动端开发与最新技术 426

PCL 使用点云创建数字高程模型DEM【2025最新版】

使用点云创建数字高程模型DEM,并将结果保存为高程图像。博客长期更新,本文最近更新时间为:2025年9月15日。

点云侠的博客 2294

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

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

微笑听雨 2838

什么是DHCP Snooping?如何配置DHCP Snooping?

功能描述防护类型防御伪造 DHCP 服务器、避免地址冲突、增强网络安全性使用场景企业园区网、校园网、大型局域网配合机制IP Source Guard、DAI、防止 ARP 欺骗部署难度⭐⭐(简单)“DHCP Snooping,是内网 DHCP 安全防护的第一道门神。” 🛡️。

网络技术联盟站 1267

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

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

Meteors.的博客 1224

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

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

ShuSheng007的程序人生 5179

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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、付费专栏及课程。

余额充值