Java设计模式(桥接模式)

定义

将抽象部分与它的实现部分解耦,使得两者都能够独立变化。

角色

抽象类(Abstraction):定义抽象类,并包含一个对实现化对象的引用。

扩充抽象类(RefinedAbstraction):是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色的业务方法。

实现类接口(Implementor):定义实现化角色的接口,供扩展抽象化角色调用。

具体实现类(ConcreteImplementor):给出实现化角色的具体实现。

优点

分离抽象接口及其实现部分,使得抽象和实现可以沿着各自的维度来变化。

可以取代多层继承方案,极大地减少了子类的个数

提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,不需要修改原有系统,符合开闭原则

缺点

会增加系统的理解与设计难度,由于关联关系建立在抽象层,要求开发者一开始就针对抽象层进行设计与编程

正确识别出系统中两个独立变化的维度并不是一件容易的事情

适用场景

需要在抽象化和具体化之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系

抽象部分和实现部分可以以继承的方式独立扩展而互不影响

一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立地进行扩展

不希望使用继承或因为多层继承导致系统类的个数急剧增加的系统

案例

某软件公司要开发一个跨平台图像浏览系统,要求该系统能够显示BMP、JPG、GIF、PNG等多种格式的文件,并且能够在Windows、Linux、UNIX等多个操作系统上运行。系统首先将各种格式的文件解析为像素矩阵(Matrix),然后将像素矩阵显示在屏幕上,在不同的操作系统中可以调用不同的绘制函数来绘制像素矩阵。另外,系统需具有较好的扩展性,以便在将来支持新的文件格式和操作系统。试使用桥接模式设计该跨平台图像浏览系统。

类图

相关推荐
墨雨晨曦887 小时前
2026/08/15 spring AI学习总结
java·tomcat
wno7048 小时前
Spring Boot JdbcTemplate配置Druid多数据源
java·spring boot·后端
聊浮游8 小时前
JAVA2026最新全套学习资料、学习路线
java·开发语言·jvm·mysql·spring·maven·idea
MacroZheng8 小时前
完美替代 Navicat!这款内置 AI 的数据库工具,太香了!
java·后端·mysql
SamDeepThinking9 小时前
从REST到gRPC,一个API选型的思考框架
java·后端·程序员
Zane19949 小时前
接口都能写默认实现了,为什么还需要抽象类
java·后端
未秃头的程序猿9 小时前
读Spring AI源码的方法——不是硬啃,是带着问题去翻
java·后端·spring
用户3126874877209 小时前
别再 Thread.sleep 硬等了!并发工具类到底怎么选?
java
Java内核笔记9 小时前
万字长文剖析 Spring Boot 4 自动配置机制源码:从 @EnableAutoConfiguration 到条件装配
java·后端
evans在进步9 小时前
Spring MVC 核心机制详解:全局异常处理、请求跳转与数据绑定
java·spring·mvc