





















概要
记忆关键词:抽象和实现分离。
定义:将抽象部分与它的实现部分分离,使它们都可以独立变化。
分析:一个类存在两个(或多个)独立变化的维度,我们通过组合的方式,让这两个(或多个)维度可以独立进行扩展。
类型:结构型
桥接模式结构图如下

一、涉及相关角色
1. 抽象部分
系统对外提供的高层接口,代表抽象的业务维度。
说明:在下面示例中,形状(Shape)是抽象部分,它定义了一个绘制形状的接口,比如 draw() 方法,但不关心具体颜色如何实现。
2. 扩充抽象部分
在抽象部分的基础上,增加额外的功能或具体行为。
说明:在下面示例中,圆形(Circle)、正方形(Square)等具体形状类,它们在 draw() 方法中调用颜色的实现。
3. 实现部分
描述抽象部分所依赖的操作接口,是另一个独立变化的维度。被抽象部分组合,完成具体实现。抽象部分通过该接口与实现部分解耦,而不是依赖具体实现。
说明:在下面示例中,颜色(Color)就是实现部分,比如红色、蓝色,它只定义颜色的行为接口
4. 具体实现部分
实现部分接口的具体类,完成实际的业务逻辑。
说明:在下面示例中颜色(Color)具体实现类有白色、灰色、黑色,它们都实现了颜色接口,完成实际业务逻辑。
二、示例代码
1. 实现部分
1 public interface Color { 2 void paint(String shape); 3 } 4 public class Black implements Color { 5 @Override 6 public void paint(String shape) { 7 System.out.println("黑色的" + shape); 8 } 9 } 10 public class White implements Color { 11 @Override 12 public void paint(String shape) { 13 System.out.println("白色的" + shape); 14 } 15 } 16 public class Gray implements Color { 17 @Override 18 public void paint(String shape) { 19 System.out.println("灰色的" + shape); 20 } 21 }
2. 抽象部分
public abstract class Shape { Color color; // 桥接到实现部分 public void setColor(Color color) { this.color = color; } public abstract void draw(); } public class Rectangle extends Shape{ @Override public void draw() { color.paint("长方形"); } } public class Square extends Shape { @Override public void draw() { color.paint("正方形"); } } public class Circle extends Shape{ @Override public void draw() { color.paint("圆形"); } }
三、优缺点分析
1. 优点
2. 缺点
四、适用场景
JDBC 驱动是桥接模式的经典应用。如果我们想要把 MySQL 数据库切换成 Oracle 数据库,只需要更换数据库驱动,动一行代码就可以实现了
支付系统 → 支付方式(实现部分) + 支付渠道(抽象部分)
日志系统 → 日志级别(抽象部分) + 输出方式(实现部分)
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。