news 2026/5/23 20:20:48

设计模式——桥接模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
设计模式——桥接模式

桥接模式 (Bridge Pattern)

什么是桥接模式?

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

简单来说:桥接模式就是将抽象和实现解耦,让它们可以独立变化。

生活中的例子

想象一下:

  • 遥控器与电视:遥控器是抽象,电视是实现,它们可以独立变化
  • 形状与颜色:形状是抽象,颜色是实现,它们可以独立组合
  • 操作系统与文件系统:操作系统是抽象,文件系统是实现

为什么需要桥接模式?

传统方式的问题

// 如果使用继承,会导致类爆炸classRedCircle{}classGreenCircle{}classBlueCircle{}classRedSquare{}classGreenSquare{}classBlueSquare{}// ... 更多组合

问题

  1. 类爆炸:多个维度组合会导致类数量爆炸
  2. 扩展困难:新增一个维度需要创建多个类
  3. 耦合度高:抽象和实现紧密耦合

桥接模式的优势

// 使用桥接模式,抽象和实现独立变化Shapeshape=newCircle(newRed());shape.draw();

优势

  1. 解耦合:抽象和实现解耦
  2. 独立变化:抽象和实现可以独立变化
  3. 扩展容易:新增抽象或实现都很容易

桥接模式的结构

┌─────────────────────┐ │ Abstraction │ 抽象 ├─────────────────────┤ │ - impl: Implementor │ │ + operation(): void │ └──────────┬──────────┘ │ 继承 │ ┌──────────┴──────────┐ │ RefinedAbstraction │ 扩展抽象 ├─────────────────────┤ │ + operation(): void │ └─────────────────────┘ ┌─────────────────────┐ │ Implementor │ 实现接口 ├─────────────────────┤ │ + operationImpl(): void│ └──────────┬──────────┘ │ 实现 ├──┬──────────────────┬──────────────┐ │ │ │ ┌──────────┴──────┐ ┌───────────┴───────┐ ┌───┴────────┐ │ ConcreteImpl1 │ │ ConcreteImpl2 │ │ ... │ 具体实现 └─────────────────┘ └───────────────────┘ └────────────┘

代码示例

1. 定义实现接口

/** * 实现接口:颜色 */publicinterfaceColor{/** * 应用颜色 */voidapplyColor();}

2. 定义具体实现

/** * 具体实现:红色 */publicclassRedimplementsColor{@OverridepublicvoidapplyColor(){System.out.println("应用红色");}}/** * 具体实现:蓝色 */publicclassBlueimplementsColor{@OverridepublicvoidapplyColor(){System.out.println("应用蓝色");}}/** * 具体实现:绿色 */publicclassGreenimplementsColor{@OverridepublicvoidapplyColor(){System.out.println("应用绿色");}}

3. 定义抽象

/** * 抽象:形状 */publicabstractclassShape{protectedColorcolor;publicShape(Colorcolor){this.color=color;}/** * 绘制形状 */publicabstractvoiddraw();}

4. 定义扩展抽象

/** * 扩展抽象:圆形 */publicclassCircleextendsShape{publicCircle(Colorcolor){super(color);}@Overridepublicvoiddraw(){System.out.print("绘制圆形,");color.applyColor();}}/** * 扩展抽象:正方形 */publicclassSquareextendsShape{publicSquare(Colorcolor){super(color);}@Overridepublicvoiddraw(){System.out.print("绘制正方形,");color.applyColor();}}

5. 使用桥接

/** * 桥接模式测试类 * 演示如何使用桥接模式将抽象与实现分离 */publicclassBridgeTest{publicstaticvoidmain(String[]args){System.out.println("=== 桥接模式测试 ===\n");// 创建不同颜色的形状System.out.println("--- 红色圆形 ---");ShaperedCircle=newCircle(newRed());redCircle.draw();System.out.println("\n--- 蓝色正方形 ---");ShapeblueSquare=newSquare(newBlue());blueSquare.draw();System.out.println("\n--- 绿色圆形 ---");ShapegreenCircle=newCircle(newGreen());greenCircle.draw();System.out.println("\n--- 红色正方形 ---");ShaperedSquare=newSquare(newRed());redSquare.draw();System.out.println("\n=== 桥接模式的优势 ===");System.out.println("1. 解耦合:抽象和实现解耦");System.out.println("2. 独立变化:抽象和实现可以独立变化");System.out.println("3. 扩展容易:新增抽象或实现都很容易");System.out.println("4. 减少类数量:避免类爆炸");System.out.println("\n=== 实际应用场景 ===");System.out.println("场景:不同形状和不同颜色的组合");System.out.println("如果不使用桥接模式,需要创建:");System.out.println(" - RedCircle, BlueCircle, GreenCircle");System.out.println(" - RedSquare, BlueSquare, GreenSquare");System.out.println(" - ... 更多组合");System.out.println("使用桥接模式,只需要:");System.out.println(" - 3种颜色:Red, Blue, Green");System.out.println(" - 2种形状:Circle, Square");System.out.println(" - 可以任意组合,共 3×2=6 种组合");}}

桥接模式的优点

  1. 解耦合:抽象和实现解耦
  2. 独立变化:抽象和实现可以独立变化
  3. 扩展容易:新增抽象或实现都很容易
  4. 减少类数量:避免类爆炸

桥接模式的缺点

  1. 增加复杂度:引入了额外的抽象层
  2. 理解困难:增加了系统的理解难度

适用场景

  1. 多个维度:系统有多个独立的维度
  2. 避免类爆炸:需要避免因继承导致的类爆炸
  3. 独立变化:抽象和实现需要独立变化

常见应用场景

  • UI框架:窗口与控件
  • 数据库驱动:数据库与驱动
  • 跨平台开发:平台与功能

使用建议

  • 多个维度:使用桥接模式
  • 避免类爆炸:使用桥接模式
  • 单一维度:直接使用继承即可

注意事项

⚠️ 桥接模式虽然强大,但要注意:

  • 只有在多个维度时才使用
  • 不要过度设计,增加不必要的复杂度
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 20:20:08

Laravel框架学习路径全解析

以下是学习Laravel框架的系统路径: 一、基础准备 环境搭建 安装PHP 8.0(推荐8.1)配置Composer:composer global require laravel/installer创建项目:laravel new project_name 目录结构解析 app/ # 核心代码…

作者头像 李华
网站建设 2026/5/23 20:20:09

金三银四,我不允许你们不知道这些软件测试面试题

01、您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 答:有黑盒和白盒两种测试种类,黑盒有等价类划分法,边界分析法,因果图法和错误猜测法。白盒有逻辑覆盖法&…

作者头像 李华
网站建设 2026/5/21 7:35:59

远程控制+智能调度,打造园区电力“无人值守”新模式

1、概述 电力监控系统实现对园区变电站、配电房内断路器、变压器、柴油发电机以及其它重要设备进行监视、测量、记录、报警等功能,并与保护设备和远方控制中心及其他设备通信,实时掌握园区变电站和配电房运行状况,快速排除故障,保…

作者头像 李华
网站建设 2026/5/23 15:48:21

基于springBoot的高校毕业生公职资讯系统的设计与实现

高校毕业生公职资讯系统的背景 高校毕业生数量逐年增加,就业压力不断增大。公职岗位因其稳定性、福利保障等特点,成为许多毕业生的首选就业方向。然而,公职考试信息分散、更新不及时、缺乏针对性指导等问题,导致毕业生在获取有效…

作者头像 李华
网站建设 2026/5/16 16:55:45

vcruntime140.dll文件丢失找不到问题 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/5/23 12:51:39

2025年度精粹|乳酰化研究大爆发:一文汇总年度重要突破

精准医学与蛋白组学关注国内外蛋白组学、蛋白修饰组学应用领域的科研进展,普及蛋白组学在生命科学及基础医学研究中的应用,一起交流学习。如有侵权请联系后台删除时光飞逝,2025年的科研画卷已徐徐合拢。过去一年,乳酰化修饰在24年…

作者头像 李华