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

【设计模式-桥接】

定义

桥接模式(Bridge Pattern)是一种结构型设计模式,它通过将抽象部分与实现部分分离,使它们都可以独立地变化。桥接模式的关键在于将类的抽象部分与其实现部分解耦,以便两者可以独立地变化。这种设计模式的一个主要用途是避免类层次结构的指数增长,尤其是在有多维度变化时,例如设备种类与设备操作。

UML图

在这里插入图片描述

角色说明

  • Abstraction(抽象类):提供客户端调用的接口,内部包含一个对实现部分对象(Implementor)的引用。
  • RefinedAbstraction(扩展抽象类):扩展了Abstraction的功能,通过调用Implementor来实现具体操作。
  • Implementor(实现接口):定义实现部分的接口,它不一定与Abstraction的接口完全一致,一般是独立的。
  • ConcreteImplementor(具体实现类):实现具体的功能逻辑,它是实现部分的具体实现。

代码

// 实现接口
interface Implementor {void operationImpl();
}// 具体实现类A
class ConcreteImplementorA implements Implementor {@Overridepublic void operationImpl() {System.out.println("ConcreteImplementorA's implementation.");}
}// 具体实现类B
class ConcreteImplementorB implements Implementor {@Overridepublic void operationImpl() {System.out.println("ConcreteImplementorB's implementation.");}
}// 抽象类
abstract class Abstraction {protected Implementor implementor;public Abstraction(Implementor implementor) {this.implementor = implementor;}public abstract void operation();
}// 扩展抽象类
class RefinedAbstraction extends Abstraction {public RefinedAbstraction(Implementor implementor) {super(implementor);}@Overridepublic void operation() {System.out.print("RefinedAbstraction is calling: ");implementor.operationImpl();}
}// 客户端代码
public class BridgePatternDemo {public static void main(String[] args) {Implementor implA = new ConcreteImplementorA();Abstraction abstractionA = new RefinedAbstraction(implA);abstractionA.operation();Implementor implB = new ConcreteImplementorB();Abstraction abstractionB = new RefinedAbstraction(implB);abstractionB.operation();}
}

适用场景

  • 当系统需要在多个维度上进行扩展,而又不希望产生大量的子类时。例如,设备种类(手机、电脑等)和设备操作(开机、关机、重启等)是两个独立的维度,可以使用桥接模式来分别处理。
  • 当一个类需要在不同的环境下工作,且这些环境可能随时变化。
    需要动态地切换实现时,桥接模式可以提供灵活性,因为实现和抽象可以独立变化。

总结

桥接模式通过将抽象与实现解耦,提供了一种灵活扩展和维护系统的方式,尤其适用于系统可能在多个维度上扩展的场景。

http://www.lryc.cn/news/439847.html

相关文章:

  • JVM JMM 专题篇 ( 12000 字详解 )
  • 【C++】—— list 模拟实现
  • Redis主要问题
  • vue3 ref的用法及click事件的说明
  • 通信工程学习:什么是HFC混合光纤同轴电缆
  • 怎么浏览URL的PDF文件呢
  • 【2025届华为秋招机考三道编程题之一】华为校招留学生软件开发工程师-真题机考笔试/(200分)- 跳格子3(Java JS Python C)
  • 高性能缓存利器:Caffeine 在 Spring Boot 中的应用
  • pWnOS的第二种全新解法(ssh私钥破解、webmin漏洞提权)
  • Maven入门学习笔记
  • linux驱动开发-arm汇编基础
  • 【HarmonyOS】鸿蒙头像上传-(编辑个人信息页- 头像上传)+实时数据更新
  • [数据集][目标检测]无人机识别检测数据集VOC+YOLO格式6986张1类别
  • 基于SSM的二手交易管理系统的设计与实现 (含源码+sql+视频导入教程+文档)
  • linux-centos 设置系统时间
  • 【Linux基础】冯诺依曼体系结构操作系统的理解
  • 算法题解:斐波那契数列(C语言)
  • SSM 框架 个人使用习惯 详细
  • [羊城杯 2020]Blackcat1
  • 腾讯云Ubuntu系统安装宝塔,配置Java环境,运行spring boot项目
  • 双亲委派机制知识点
  • vue part 11
  • 【QT】常用类
  • 从index_put出发全面学习cuda和pytorch技术
  • 浅谈住房城乡建设部科技创新平台布局重点方向
  • 调用 write()函数后,如何知道数据是否已经写入磁盘?
  • 策略路由与路由策略的区别
  • 从底层原理上理解ClickHouse 中的稀疏索引
  • xtu oj 锐角三角形
  • MATLAB系列04:循环结构