7、设计模式之桥接模式(Bridge)

news2024/11/16 6:03:13

一、什么是桥接模式
桥接模式是一种结构型设计模式。它将抽象部分和实现部分分离,使它们可以独立地变化。

二、角色组成
抽象部分(Abstraction):定义了抽象部分的接口,并包含对实现部分的引用。
实现部分(Implementor):定义了实现部分的接口。
具体抽象(Concrete Abstraction):继承抽象部分,实现其中定义的抽象方法。
具体实现(Concrete Implementor):实现Implementor,实现其中定义的具体行为。
三、优缺点
优点:

分离抽象和实现,使得它们可以独立变化。
提高了系统的灵活性和可扩展性。
隐藏了具体的实现细节,使系统更加稳定和可靠。
符合开闭原则,可以方便地增加新的抽象和实现部分。
缺点:

需要定义抽象部分和实现部分之间的桥接接口,增加了系统的复杂性。
如果一个类有多个变化的维度,使用桥接模式可能会导致类的数量增多,增加了系统的复杂性和维护成本。
四、应用场景
4.1 生活场景
墙上的开关:可以看到的开关是抽象的,不用管里面具体怎么实现的。
蓝牙耳机与手机:蓝牙耳机可以连接不同品牌的手机,那么手机就可以看作是抽象部分,蓝牙耳机是实现部分,实现不同蓝牙耳机与不同手机的连接和通讯。
遥控器和电视:同样道理,遥控器可以控制不同品牌的电视,遥控器可以作为抽象部分,电视则作为实现部分,实现不同遥控器与不同电视的连接和操作。
4.2 java场景

JdbcTemplate:用于简化数据库操作的类,它使用了桥接模式将数据库的访问方式(如JDBC、Hibernate、MyBatis)与具体的实现(Oracle、Mysql、SQL
Server)分离,这样可以方便地切换不同的数据库访问方式。
Spring的DI和IOC:抽象部分定义了接口或抽象类。比如BeanFactory,而实现部分则由具体的实现类(XmlBeanFactory等)提供。
日志框架:抽象部分定义了一组日志记录接口,并提供了不通过的日志记录方法,如DEBUG、INFO、ERROR等,实现部分则通过具体的日志实现类提供实际的日志记录功能,如Log4j、Logback等。

五、代码实现
下面是一个蓝牙耳机和手机的简单例子,用来解释桥接模式。手机作为抽象部分,蓝牙耳机作为实现部分。通过抽象类对实现类接口的引用,使手机可以调用蓝牙接口的方法,实现手机与蓝牙耳机的连接和调用的解耦。

抽象部分:Phone
实现部分:Bluetooth
具体抽象:HWPhone、IPhone
具体实现:BluetoothImpl

5.0 UML类图
在这里插入图片描述
5.1 实现部分——Bluetooth

/**
 *
 * 1.实现部分(Implementor):蓝牙接口
 */
public interface Bluetooth {
    //连接
    void connect();
 
    //断开
    void disConnect();
}

5.2 具体实现——BluetoothImpl

/**
 * 
 * 2.具体实现(Concrete Implementor):实现蓝牙接口
 */
public class BluetoothImpl implements Bluetooth{
    @Override
    public void connect() {
        System.out.println("蓝牙已连接!");
    }
 
    @Override
    public void disConnect() {
        System.out.println("蓝牙已断开!");
    }
}

5.3 抽象部分——Phone

/**
 * 
 * 3.抽象部分(Abstraction):手机抽象类
 */
public abstract class Phone {
 
    //蓝牙接口实例
    protected Bluetooth bluetooth;
 
    public Phone(Bluetooth bluetooth){
        this.bluetooth=bluetooth;
    }
 
    //手机具体功能,调用蓝牙接口的方法
    public abstract void bluetoothFunction();
}

5.4 具体抽象

/**
 * 
 * 4.具体抽象:苹果手机
 */
public class IPhone extends Phone{
 
    public IPhone(Bluetooth bluetooth) {
        super(bluetooth);
    }
 
    //手机具体功能,调用蓝牙
    @Override
    public void bluetoothFunction() {
        System.out.println("苹果手机使用蓝牙耳机");
        bluetooth.connect();
        bluetooth.disConnect();
    }
}
/**
 * 
 * 4.具体抽象:华为手机
 */
public class HWPhone extends Phone{
    public HWPhone(Bluetooth bluetooth) {
        super(bluetooth);
    }
 
    //手机具体功能,调用蓝牙
    @Override
    public void bluetoothFunction() {
        System.out.println("华为手机使用蓝牙耳机");
        bluetooth.connect();
        bluetooth.disConnect();
    }
}

5.5 TestBridge

/**
 * 
 * 桥接模式测试类
 */
@SpringBootTest
public class TestBridge {
 
    @Test
    void testBridge(){
        //1 创建蓝牙耳机对象
        Bluetooth bluetooth=new BluetoothImpl();
        //2.创建不同品牌的手机对象
        //苹果
        Phone iPhone=new IPhone(bluetooth);
        //华为
        Phone hw=new HWPhone(bluetooth);
        //调用手机的具体功能方法
        iPhone.bluetoothFunction();
        System.out.println("=========================");
        hw.bluetoothFunction();
    }
}

六、总结
当一个类需要两个或多个变化维度时:桥接模式可以将这些变化维度分离出来,使它们可以独立变化。例如,在一个图形编辑器中,图形和颜色可以被视为两个变化的维度,通过使用桥接模式,可以实现不同图形和不同颜色的组合。
当需要实现多层继承时:使用继承会导致类层次结构的爆炸性增长,难以维护和扩展。而桥接模式通过将抽象部分和实现部分分离,使得新增功能可以通过组合来实现,而不是通过继承。
当需要在抽象部分和实现部分之间增加灵活性时:桥接模式允许抽象部分和实现部分可以独立变化,提供了更大的灵活性和可配置性。例如,在一个电商平台中,抽象部分可以是商品,实现部分可以是支付方式,通过桥接模式可以在运行时选择不同的支付方式。
当需要对抽象和实现部分进行扩展时:桥接模式允许抽象部分和实现部分可以独立扩展,而不会相互影响。例如,在一个电子设备管理系统中,抽象部分可以是设备接口,实现部分可以是不同类型的设备,通过桥接模式可以方便地添加新的设备类型。
总结:桥接模式适用于多维度变化、多层继承、灵活性要求高、扩展性高的场景。

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

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

相关文章

GPU技术文档汇总

GPU 进阶笔记(二):华为昇腾 910B GPU 相关(2023)https://arthurchiao.art/blog/gpu-advanced-notes-2-zh/

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的铁轨缺陷检测系统(Python+PySide6界面+训练代码)

摘要:开发铁轨缺陷检测系统对于物流行业、制造业具有重要作用。本篇博客详细介绍了如何运用深度学习构建一个铁轨缺陷检测系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并对比了YOLOv7、YOLOv6、YOLOv5,展示了不同模…

做嵌入式编程,为什么用的是C语言而不是C++呢?

做嵌入式编程,为什么用的是C语言而不是C呢? 在开始前我分享下我的经历,我刚入行时遇到一个好公司和师父,给了我机会,一年时间从3k薪资涨到18k的, 我师父给了一些 电气工程师学习方法和资料,让我…

【阿里云系列】-如何实现两个VPC网络资源互通

背景 由于实际项目预算有限,两套环境虽然分别属于不同的专有网络即不同的VPC,但是希望借助一台运维机器实现对两个环境的监控和日常的运维操作 网络架构 如下是需要实现的外网架构图,其中希望实现UAT环境的一台windows的堡垒机可以访问生产…

光学硬件——二向色片

二向色镜(Dichroic Mirrors )又称双色镜,常用于激光技术中。 产品介绍: 指45度入射或大角度入射时,把光源分离出特定的光谱改变部分光谱光路方向,常用于酶标仪器、荧光显微镜系统、投影光引擎系统、激光灯…

β2-肾上腺素能受体激动剂通过重建T细胞分化的稳态来纠正血小板减少-AbMole

免疫性血小板减少症(ITP)是一种自身免疫性出血性疾病,其特征是血小板的增加破坏和减少产生。ITP的发病机制尚未完全明了,但已知与自身抗体介导的血小板破坏和脾脏中Fc依赖性吞噬作用有关。 此外,T细胞免疫的异常在ITP的…

解决:黑马webpack视频中出现的问题总结

问题 1 ERROR in main Module not found: Error: Can‘t resolve ‘./src‘ 解决 Webpack 中 ERROR in main Module not found: Error: Can‘t resolve ‘./src‘ 问题 黑马AJAX-Node.js-Webpack教学视频(BV1MN411y7pw 其中P98)中webpack部分&#xff0c…

《JAVA与模式》之合成模式

系列文章目录 文章目录 系列文章目录前言一、合成模式二、安全式合成模式的结构三、透明式合成模式的结构四、两种实现方法的选择前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享…

综合知识篇00-综合知识考点汇总目录(2024年软考高级系统架构设计师冲刺知识点总结-综合知识篇-先导篇)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级…

springboot网页时装购物系统链接

链接:https://pan.baidu.com/s/1mCmCSbqUCv48_a6wiLBdJg?pwdfalz 提取码:falz 2600套项目源码 https://kdocs.cn/l/cuAdxEBfLiqA 工作室精心制作,包括小程序项目,springboot项目,传统ssm项目,前后端分离项目。你可以用来制作自…

TCP/IP模型中网络层和网络接口层的区别 通俗解释

问题 TCP/IP模型中的网络层和网络接口层有什么区别,或者说 ip地址和mac地址有什么区别,通过ip不就能找到要发送的设备了吗 为什么还需要mac地址用简单的语言来解释一下。 TCP/IP模型中的网络层和网络接口层主要的区别在于它们处理的信息和功能不同&…

打字通小游戏制作教程:用HTML5和JavaScript提升打字速度

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

混合测试写一写

题目 服务器IP地址规划:client:12.0.0.12/24,网关服务器:ens36:12.0.0.1/24、ens33:192.168.44.1/24,Web1:192.168.44.30/24,Web2:192.168.44.50/24,Nginx&am…

2.4GHz SOC芯片SI24R03无线网络传感器方案

随着科技的不断进步,智能环境监测已成为现代社会发展的必然趋势。为了满足不同场景下对环境参数的实时监测需求,我们推出了适用于无线网络传感器方案的2.4GHz芯片,旨在为用户打造高效、智能的环境监测体系。 01方案介绍 1、技术原理&am…

2024年最便宜的阿里云服务器购买图文教程,2核2G61元,2核4G99元

2024年,阿里云推出了多款价格非常便宜的云服务器和轻量应用服务器,其中轻量应用服务器2核2G3M带宽50G系统盘只要61元/1年,2核4G4M带宽60G系统盘只要165元/1年。云服务器2核2G3M带宽40G系统盘只要99元/1年,2核4G5M带宽80G系统盘只要…

VS Code搭建windows+远程Linux上Docker的开发环境

在本地windows桌面系统远程Linux上Docker搭建开发环境主要步骤如下: 一、安装vs code和插件 在windows系统上安装vs code,并安装好remote-ssh、dev-container插件,也可以直接安装Remote Development,他会默认把vs code远程的几种…

【计算机视觉】图像处理算法(形态学滤波篇)

来源:《OpenCV3编程入门》,怀念毛星云大佬🕯️ 说明:本系列重点关注各种图像处理算法的原理、作用和对比 形态学滤波(1 ):腐蚀与膨胀 形态学槪述 数学形态学的概念: 数学形态学(Mathematical morphology)是立在格论…

通过案例学习提高沟通绩效的方法

在工作过程中,是否经常听到员工抱怨费力不讨好,而上级总是对员工工作不满意,认为员工理解力太差、工作不认真,员工很冤枉,上级很恼火,总之是双方谁也不认为谁错。面对这样的问题,我们该如何解决…

13---HDMI电路设计

视频链接 HDMI电路设计01_哔哩哔哩_bilibili HDMI电路设计 1、HDMI简介 HDMI全称“High Definition Multimedia Interface高清多媒体接口”。2002年4月,来自电子电器行业的7家公司—日立、松下、飞利浦、Silicon Image、索尼、汤姆逊、东芝共同组建了HDMI高清多…

数据分析:如何深挖原因,推动业务

我们都知道,做事情如果只解决表面原因,并不能真正解决所有问题。但是,很多时候,数据分析的大部分工作,却让你花尽心思去找表面原因。比如: 用户数下跌了:A渠道新用户下跌 转化率提升了&#x…