news 2026/7/16 21:52:01

设计模式——桥接模式

作者头像

张小明

前端开发工程师

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/7/13 7:16:46

HTML5 与 H5:别再让你的专业度在称呼中流失

在中国互联网行业的日常交流中,很少有一个词像“H5”这样被高频使用,却又被如此普遍地误解。当你听到有人说“做一个 H5”时,对方指的往往是一个在微信朋友圈传播的精美幻灯片,或者是一个简单的营销小游戏。然而,当你打…

作者头像 李华
网站建设 2026/7/15 2:30:18

3-VueAjax

什么是Vue Vue是一款用于构建用户界面的渐进式的JavaScript框架。官方网站:https://cn.vuejs.org/ 前端负责将数据以美观的样式呈现出来,而数据最终又要在数据库服务器中存储并管理。前端想要拿到数据,就需要请求服务器。然后服务器将数据返…

作者头像 李华
网站建设 2026/7/15 8:16:34

基于springBoot的房屋租赁管理系统

房屋租赁管理系统的背景意义 市场需求驱动 随着城市化进程加快,流动人口增多,房屋租赁需求持续增长。传统租赁方式依赖中介或线下沟通,效率低且信息不透明。数字化管理系统能优化流程,提升供需匹配效率,降低交易成本…

作者头像 李华
网站建设 2026/7/15 7:14:45

Java基于SSM+JSP的智慧农业无人机租赁系统的设计与实现

项目说明 农业无人机是一种在现代农业中广泛应用的无人机设备,它可以通过遥控或自主飞行,进行一系列农业作业。这些无人机通常配备有高分辨率相机和绘图设备,可以用于进行土地勘测、作物评估、农药喷洒等农业活动。无人机在农业领域的应用&am…

作者头像 李华
网站建设 2026/7/15 3:46:01

学长亲荐2026专科生AI论文工具TOP9:开题报告神器大测评

学长亲荐2026专科生AI论文工具TOP9:开题报告神器大测评 2026年专科生AI论文工具测评:如何选对“开题报告神器”? 随着AI技术在学术领域的广泛应用,越来越多的专科生开始借助智能写作工具提升论文撰写效率。然而,面对市…

作者头像 李华
网站建设 2026/7/15 4:27:33

今天面了一个来字节要求月薪23K,明显感觉他背了很多面试题...

最近有朋友去字节面试,面试前后进行了20天左右,包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮面试。 其实&…

作者头像 李华