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

news2024/11/16 1:55:41

文章目录

    • 桥接模式简绍
    • 桥接模式的核心概念包括以下几个部分:
    • 桥接模式的工作流程
    • 桥接模式优缺点
        • 桥接模式优点
        • 桥接模式缺点
    • UML图
    • 代码示例
        • 适用场景

桥接模式简绍

桥接模式(Bridge Pattern)是对象结构型设计模式中的一种,它将抽象与实现分离,使得两者可以独立地变化。这种模式的主要目的是解耦一个类的接口与其实现部分,从而可以更加灵活地给一个对象配置不同的功能实现。

桥接模式的核心概念包括以下几个部分:

  • 抽象 (Abstraction) - 定义一个顶层接口或抽象类,这个抽象层持有一个指向具体实现部分的引用。
  • 精炼抽象 (Refined Abstraction) - 扩展抽象中的行为,并且提供实现的方法。通常精炼抽象会根据实际需求细化抽象提供的基本操作。
  • 实现者接口 (Implementor) - 这是一个接口或抽象类,定义实现部分的接口标准。
  • 具体实现者 (Concrete Implementors) - 实现上述的实现者接口,并包含具体的实现细节。

通过这种方式,桥接模式允许在程序运行时改变对象的表现形式或行为,而无需修改代码。这提高了系统的可扩展性,因为你可以独立地增加新的实现类或抽象类。

桥接模式的工作流程

  • 客户端代码创建一个具体的Refined Abstraction实例。 在创建时,将一个具体的Implementor实例传递给Refined
  • Abstraction。 当调用Refined Abstraction的方法时,它将请求转发给它的Implementor对象。
  • Implementor执行具体的实现,并返回结果给Refined Abstraction。 Refined
  • Abstraction可能进一步处理结果,并最终将其返回给客户端。

桥接模式优缺点

桥接模式优点
  • 分离接口与实现:桥接模式使得抽象和实现可以独立变化。
  • 提高灵活性:可以在不改变客户端代码的前提下添加新的实现或抽象。
  • 支持多维度扩展:可以同时沿多个维度扩展系统。
桥接模式缺点
  • 当一个对象的实现应该独立于其产品接口及其实现细节时。
  • 当你想减少抽象和实现相互依赖的程度时。
  • 当你想通过组合对象来达到比继承更好的复用性时。

UML图

在这里插入图片描述

代码示例

使用 充电宝作为示例,实现 充电宝形状以及支持的协议
创建一个 充电宝接口, 基础接口层

public interface Powerbank {
    public void applyPowerBank();
}

实现是小的, 实现接口

public class LittlePower implements Powerbank{
    @Override
    public void applyPowerBank() {
        System.out.println("充电宝小的");
    }
}

实现是方的,实现接口

public class SidePower implements Powerbank{
    @Override
    public void applyPowerBank() {
        System.out.println("充电宝方的");
    }
}

创建 支持的 接口 抽象实现 原有的 形状实现,定义一个抽象接口位于顶层

public abstract class Connector {
    Powerbank powerbank;

    public Connector(Powerbank powerbank){
        this.powerbank = powerbank;
    }

    public abstract void applyConnector();

}

支持 typec,抽象接口具体实现,并调用原有实现的接口信息

public class Typec extends Connector{

    public Typec(Powerbank powerbank) {
        super(powerbank);
    }

    @Override
    public void applyConnector() {
        powerbank.applyPowerBank();
        System.out.println("支持typec");
    }
}

支持 usb 抽象接口具体实现,并调用原有实现的接口信息

public class Usb extends Connector{


    public Usb(Powerbank powerbank) {
        super(powerbank);
    }

    @Override
    public void applyConnector() {
        powerbank.applyPowerBank();
        System.out.println("支持usb");
    }
}

具体调用实现, 测试调用逻辑

public class Main {
    public static void main(String[] args) {
        Typec typec = new Typec(new LittlePower());
        typec.applyConnector();
        Usb usb = new Usb(new SidePower());
        usb.applyConnector();
    }
}
适用场景
  1. 分离接口与实现
    桥接模式的主要目的是将一个类的接口与其实现分离。这使得你可以独立地扩展类的抽象部分和实现部分

  2. 动态选择实现
    桥接模式允许在运行时动态选择不同的实现。这对于需要在运行时切换实现的场景非常有用。

  3. 系统升级和维护
    桥接模式使得系统更加易于升级和维护,因为你可以单独修改实现而不影响其他部分的代码。例如,当需要添加新的绘制算法时,只需添加新的实现类而无需修改现有代码。

  4. 多层次抽象
    桥接模式支持多层次的抽象,这意味着你可以通过组合不同级别的抽象和实现来创建复杂的行为。例如,你可以组合不同的图形和不同的颜色实现。

  5. 系统集成
    在大型系统集成中,桥接模式可以帮助将不同的子系统或模块连接起来,同时保持高度的灵活性和可扩展性。

  6. 用户界面设计
    在用户界面设计中,桥接模式可以用来分离控件的外观和行为。例如,一个按钮控件可以有不同的皮肤(实现),但其基本功能(抽象)保持不变。

  7. 设备驱动程序
    在编写设备驱动程序时,桥接模式可以用来隔离硬件特定的实现细节,使得驱动程序更易于维护和扩展。

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

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

相关文章

艾丽卡的区块链英语小课堂

系列文章目录 IT每日英语(三) 文章目录 系列文章目录前言1.principle2.efficient3.implement4.accumulated5,occupation6.phases7.validator8.nominated9.commissions10.significantly 前言 欢迎来到艾丽卡的区块链英语小课堂,在这里&…

650人微软员工被裁,动视暴雪制作团队调整,游戏行业风云再起

易采游戏网9月14日消息:微软宣布将裁员650人,这一消息在游戏行业引起了广泛的关注和讨论。此次裁员主要集中在微软的子公司动视暴雪,涉及到《魔兽大作战》和《使命召唤:战争地带》这两个备受瞩目的游戏团队。尽管裁员让很多玩家感…

基于python+django+vue的二手电子设备交易平台

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的二…

wget不管用的情况下,如何在centos中手动安装yum

wget不管用的情况下,如何在centos中手动安装yum 1、卸载python和yum2、手动下载需要的包3、更换yum源4、清理yum缓存,并生成新的缓存5、更新yum6、最后试试安装wget 问题背景,我在使用yum遇到了问题,想着重新安装一下,…

生成式人工智能(AIGC)对职业院校“云课堂”的赋能路径与价值边界

一、前言 随着教育技术的快速发展,生成式人工智能(Artificial Intelligence General Content, AIGC)正在成为推动教育改革的重要力量。生成式人工智能(AIGC)技术的应用,为职业院校的“云课堂”提供了新的教…

Oracle数据库软件的下载与安装步骤(适用于初学者)

目录 背景: 安装过程: 验证是否安装成功: 背景: Oracle,全程Oracle Corporation(甲骨文公司),是全球领先的企业级软件公司,其最著名的产品是Oracle数据库,Oracle数据库是一款关系型数据库系统(RDBMS)&am…

世界主要国家跨境数据流动的政策法规及其启示

文章目录 前言一、主要国家加强跨境数据流动的监管措施二、全球跨境数据流动的关键问题三、中国跨境数据流动治理的不足与对策前言 随着数据成为全球经济发展的战略资源,各国政府正积极构建安全有效的治理体系,以扩大数据的社会和经济效益,探讨世界主要国家跨境数据流动的政…

LeetCode题练习与总结:翻转二叉树--226

一、题目描述 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]示例 2: 输入:root [2,1,3] 输出:[2,3,1…

可维护性例题2

答案:C 解析: 选项A 维护性是软件质量的重要指标 选项B 软件开发受软件开发文档因素影响,因此受开发文档影响 选项C 维护占软件开发的比较长的时期 选项D 说法正确

【Python爬虫系列】_020.异步协程asyncio

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈…

水壶问题00

题目链接 水壶问题 题目描述 注意点 1 < x, y, target < 1000 解答思路 首先想到的是深度优先遍历&#xff0c;对于任意一个状态&#xff0c;可以有以下六种操作&#xff1a; 将x水壶中的水倒空将y水壶中的水倒空将x水壶灌满将y水壶灌满将x水壶中的水倒给y水壶&…

Leetcode3275. 第 K 近障碍物查询

Every day a Leetcode 题目来源&#xff1a;3275. 第 K 近障碍物查询 解法1&#xff1a;大根堆 维护前 k 小元素&#xff0c;可以用最大堆。 遍历数组 queries&#xff0c;计算点 (x,y) 到原点的曼哈顿距离 d∣x∣∣y∣。 把 d 入堆&#xff0c;如果堆大小超过 k&#xff…

OpenAI o1来是来了,但...

北京时间昨天凌晨&#xff0c;OpenAI正式发布了o1&#xff0c;这次来是来了&#xff0c;但...结合前一阵的思考和环境&#xff0c;说一下自己的感想吧&#xff1a; Ⅰ. 感觉OpenAI要有朝着Close一条道走到黑的趋势了..且看起来Close的很蹩脚(原因见下)&#xff0c;在这种Close下…

杂七杂八-部署框架

杂七杂八-部署框架 docker docker dockerhub&#xff1a;Docker发布/上传镜像到dockerhub&&下载/拉取镜像&&删除dockerhub镜像 仅个人笔记使用&#xff0c;感谢点赞关注 目前仅专注于 NLP 大模型 机器学习和前后端的技术学习和分享 感谢大家的关注与支持&…

ModuleNotFoundError: No module named ‘transformers_modules.chatglm2-6b

ModuleNotFoundError: No module named ‘transformers_modules.chatglm2-6b 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武…

基于python+django+vue的农业管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的农…

Linux 防火墙:iptables (二)

文章目录 SNAT 原理与应用SNAT 应用环境SNAT 原理SNAT 转换前提条件SNAT 格式SNAT 转换规则配置 DNAT 原理与应用DNAT 应用环境DNAT 原理DNAT 转换前提条件DNAT 格式DNAT 转换规则配置 iptables 规则的备份和还原导出&#xff08;备份&#xff09;所有表的规则导入&#xff08;…

精益思维如何在医疗电子领域实现持续创新?

随着科技的飞速发展&#xff0c;医疗电子设备不仅要求更高的技术精度和稳定性&#xff0c;还需满足日益增长的个性化需求&#xff0c;而精益思维正是实现这一目标的有效途径。 精益思维起源于制造业&#xff0c;强调以最小的资源投入获得最大的运营效益。在医疗电子领域&#x…

口腔助手系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;医生管理&#xff0c;预约信息管理&#xff0c;口腔历史管理&#xff0c;用户反馈管理&#xff0c;在线问诊管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&a…

堆叠沙漏网络(stacked hourglass network)学习

定义 Stacked Hourglass Networks是2016年密歇根大学提出的经典网络架构。是曾经最具代表性的姿态识别SOTA之一。 hourglass network hourglass network 本身其实可以理解成是一个encoder-decoder的结构&#xff0c;encoder最大程度的提取图像在每一个scale的特征以及空间信…