当前位置: 首页 > news >正文

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

文章目录

    • 桥接模式简绍
    • 桥接模式的核心概念包括以下几个部分:
    • 桥接模式的工作流程
    • 桥接模式优缺点
        • 桥接模式优点
        • 桥接模式缺点
    • 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{@Overridepublic void applyPowerBank() {System.out.println("充电宝小的");}
}

实现是方的,实现接口

public class SidePower implements Powerbank{@Overridepublic 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);}@Overridepublic void applyConnector() {powerbank.applyPowerBank();System.out.println("支持typec");}
}

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

public class Usb extends Connector{public Usb(Powerbank powerbank) {super(powerbank);}@Overridepublic 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. 设备驱动程序
    在编写设备驱动程序时,桥接模式可以用来隔离硬件特定的实现细节,使得驱动程序更易于维护和扩展。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python数据分析工具(一):Requests的用法
  • Unity实战案例全解析 :PVZ 植物脚本分析
  • 经典sql题(六)查找用户每月累积访问次数
  • 【Hot100】LeetCode—84. 柱状图中最大的矩形
  • Rust表达一下中秋祝福,群发问候!
  • 【优化器】Optimizer——深度学习中的优化器是什么作用呢?
  • claude,gpt,通义千问
  • 5. Python之数据类型
  • MATLAB窗口操作常用命令
  • 基于 Delphi 的家庭财务管理系统
  • Linux-mysql5.7-mysql8.0安装包下载及安装教程,二合一
  • 车型展示+接驳体验!苏州金龙海格客车闪耀汉诺威商用车展
  • Android 系统下:普通应用无缝安装,Launcher 应用安装遭遇罕见障碍解析
  • 使用 Java 初步搭建简单Spring 项目框架:
  • Docker和K8S
  • Google 是如何开发 Web 框架的
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • ES6之路之模块详解
  • extjs4学习之配置
  • LeetCode18.四数之和 JavaScript
  • linux学习笔记
  • Lsb图片隐写
  • Puppeteer:浏览器控制器
  • SpringBoot 实战 (三) | 配置文件详解
  • Sublime Text 2/3 绑定Eclipse快捷键
  • ucore操作系统实验笔记 - 重新理解中断
  • 当SetTimeout遇到了字符串
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 订阅Forge Viewer所有的事件
  • - 概述 - 《设计模式(极简c++版)》
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 聊一聊前端的监控
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 悄悄地说一个bug
  • 如何进阶一名有竞争力的程序员?
  • 世界上最简单的无等待算法(getAndIncrement)
  • 学习笔记TF060:图像语音结合,看图说话
  • #pragma multi_compile #pragma shader_feature
  • #在 README.md 中生成项目目录结构
  • (07)Hive——窗口函数详解
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (3)llvm ir转换过程
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (待修改)PyG安装步骤
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (六)DockerCompose安装与配置
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)Oracle存储过程编写经验和优化措施