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

23种设计模式-桥接(Bridge)设计模式

桥接设计模式

  • 🚩什么是桥接设计模式?
  • 🚩桥接设计模式的特点
  • 🚩桥接设计模式的结构
  • 🚩桥接设计模式的优缺点
  • 🚩桥接设计模式的Java实现
  • 🚩代码总结
  • 🚩总结

🚩什么是桥接设计模式?

桥接模式(Bridge Pattern)结构型设计模式,它将 抽象部分实现部分 分离,使它们可以 独立变化。桥接模式通过 组合 而不是继承来实现抽象与实现的解耦。

使用场景

  • 当需要 避免抽象与实现之间的永久绑定 时。

  • 抽象部分实现部分 都需要 独立扩展 时。

  • 当需要 在运行时切换实现 时。

🚩桥接设计模式的特点

  • 分离抽象与实现:桥接模式将抽象部分与实现部分分离,使它们可以独立变化。

  • 灵活性:抽象部分和实现部分可以独立扩展,互不影响。

  • 可扩展性:新增抽象或实现时,无需修改现有代码。

  • 解耦:通过组合关系替代继承关系,降低系统的耦合度。

🚩桥接设计模式的结构

桥接模式主要包含以下部分:

  • Abstraction(抽象部分):定义抽象接口,并维护一个对 实现部分 的引用。

  • RefinedAbstraction(扩展抽象部分):对抽象部分进行扩展,提供更多的功能。

  • Implementor(实现部分接口):定义实现部分的接口,供抽象部分调用。

  • ConcreteImplementor(具体实现部分):实现 Implementor 接口,提供具体的实现。

图例:在这里插入图片描述

🚩桥接设计模式的优缺点

✅ 优点

  • 分离抽象与实现:抽象部分和实现部分可以独立变化,互不影响。

  • 灵活性:可以在运行时动态切换实现。

  • 可扩展性:新增抽象或实现时,无需修改现有代码。

  • 解耦:通过组合关系替代继承关系,降低系统的耦合度。

❌ 缺点

  • 增加复杂性:桥接模式引入了更多的类和对象,增加了系统的复杂性。

  • 设计难度:需要正确识别抽象部分和实现部分,设计难度较高。

🚩桥接设计模式的Java实现

代码地址:GitHub

  • 首先创建实现部分接口Color,定义方法 OperationImp()
/*** @author hanson.huang* @version V1.0* @InterfaceName Color* @Description 实现部分接口 Color* @date 2025/3/24 10:46**/
public interface Color {public void OperationImp(String name);
}
  • 创建 抽象产品类Product,定义抽象方法 Operation(),并维护一个对 接口Color 的引用。
/*** @author hanson.huang* @version V1.0* @ClassName Product* @Description 产品抽象类* @date 2025/3/24 10:40**/
public abstract class Product {private String name;protected Color color;public void setName(String name) {this.name = name;}public String getName() {return name;}public void setColor(Color color) {this.color = color;}public abstract void Operation();
}
  • 创建 扩展抽象部分 ProductA,实现 Operation() 方法,调用 实现部分 的方法。
/*** @author hanson.huang* @version V1.0* @ClassName ProductA* @Description 扩展抽象部分 ProductA* @date 2025/3/24 10:48**/
public class ProductA extends Product {@Overridepublic void Operation() {color.OperationImp(this.getName());}
}
  • 创建 具体实现部分 Red 和 Blue,分别实现 OperationImp() 方法。

    • Red
    /*** @author hanson.huang* @version V1.0* @ClassName Red* @Description 具体实现部分 Red* @date 2025/3/24 10:49**/
    public class Red implements Color {@Overridepublic void OperationImp(String name) {System.out.println(name + ":红色");}
    }
    
    • Blue
    /*** @author hanson.huang* @version V1.0* @ClassName Blue* @Description 具体实现部分 Blue* @date 2025/3/24 10:49**/
    public class Blue implements Color {@Overridepublic void OperationImp(String name) {System.out.println(name + ":蓝色");}
    }
    
  • 测试桥接模式

/*** @author hanson.huang* @version V1.0* @ClassName BridgePattern* @Description 测试桥接模式* @date 2025/3/24 10:59**/
public class BridgePattern {public static void main(String[] args) {Product productA1 = new ProductA();Product productA2 = new ProductA();Red red = new Red();productA1.setName("产品A1");productA1.setColor(red);productA1.Operation();Blue blue = new Blue();productA2.setName("产品A2");productA2.setColor(blue);productA2.Operation();}
}

📌 运行结果

在这里插入图片描述

🚩代码总结

  • 抽象部分 Product 定义抽象方法 Operation(),并维护一个对 实现部分 Color 的引用。

  • 扩展抽象部分ProductA实现 Operation() 方法,调用 实现部分 的方法。

  • 实现部分接口Color定义方法 OperationImp()

  • 具体实现部分 RedBlue 分别实现 OperationImp() 方法。

🚩总结

  • 桥接模式(Bridge Pattern)抽象部分实现部分 分离,使它们可以 独立变化

  • 适用于 避免抽象与实现之间的永久绑定独立扩展抽象与实现在运行时切换实现 的场景。

  • Java 实现 需要 定义抽象部分实现部分接口 以及 具体实现部分,并通过组合关系将两者连接起来。

✅ 适用场景:

  • 需要 避免抽象与实现之间的永久绑定 时。

  • 需要 独立扩展抽象与实现 时。

  • 需要 在运行时切换实现 时。

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

在这里插入图片描述

原文地址:https://blog.csdn.net/weixin_45683778/article/details/146470643
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mrgr.cn/news/95986.html

相关文章:

  • C++锁: 读锁,递归锁,超时锁
  • 2017年计算机真题
  • STM32 - 在机器人、自动化领域,LL库相比HAL优势明显
  • 【解决】Mybatis-plus2.x升级到3.x
  • mac vim命令快捷键
  • MapStruct动态生成实现
  • 【AI】Orin Nano+ubuntu22.04上移植YoloV11,并使用DeepStream测试成功
  • mysql高级,mysql体系结构,mysql引擎,存储过程,索引,锁
  • (UI自动化测试web端)第二篇:元素定位的方法_css定位之ID选择器
  • uniapp动态循环表单校验失败:初始值校验
  • 解决Spring Cloud OpenFeign端点未暴露问题
  • Modbus RTU ---> Modbus TCP透传技术实现(Modbus透传、RS485透传、RTU透传)分站代码实现、协议转换器
  • 反序列化漏洞
  • Docker+Ollama+Xinference+RAGFlow+Dify部署及踩坑问题
  • msyql--基本操作之运维篇
  • 【JavaSE】抽象类和接口
  • uniapp页面列表,详情返回不刷新,新增或编辑后返回刷新
  • mysql中show命令的使用
  • NodeJs之fs模块
  • 【408--复习笔记】计算机组成原理