桥接模式的核心价值是将“抽象”与“实现”两个独立变化维度解耦,通过组合而非继承建立连接,使二者可各自演化。它由Abstraction、RefinedAbstraction、Implementor和ConcreteImplementor四角色构成,适用于存在正交变化方向且子类因组合爆炸的场景。

桥接模式的核心价值,是把“抽象”和“实现”两个变化方向拆开,让它们各自独立演化。它不靠继承绑定关系,而是用组合建立连接——抽象类持有一个实现类的引用,运行时才决定具体用哪个实现。
为什么需要桥接:当继承树开始“爆炸”
假设你在开发一个图形编辑系统,既要支持不同形状(Circle、Rectangle),又要适配多种渲染方式(OpenGL、Vulkan、Software)。如果用继承,就得为每种组合写一个子类:OpenGLCircle、VulkanCircle、SoftwareRectangle……类数量呈乘积级增长,新增一个形状或一个渲染器,都要补一堆类。
桥接模式把“形状”作为抽象维度,“渲染器”作为实现维度,两者解耦。Shape 不继承 Renderer,而是持有 Renderer 接口的引用;Renderer 子类只专注自身逻辑,不关心谁在调用它。
关键结构:抽象层 + 实现层 + 桥梁连接
四个角色缺一不可:
- Abstraction(抽象类):定义高层接口,持有一个 Implementor 引用,所有操作最终委托给它
- RefinedAbstraction(优化抽象类):扩展 Abstraction,可添加新行为,但不改变与实现的协作方式
- Implementor(实现接口):声明底层操作的统一契约,比如 render(), resize(),不涉及具体平台细节
- ConcreteImplementor(具体实现类):实现 Implementor,封装 OpenGL/Vulkan 等真实调用
动手写一个轻量桥接示例(Java 风格伪码)
以消息推送为例:推送渠道(SMS、Email、Push)是实现维度;消息类型(Alert、Notification、Promotion)是抽象维度。
interface MessageSender {
void send(String content);
}
class SMSSender implements MessageSender {
public void send(String content) { System.out.println("SMS: " + content); }
}
class EmailSender implements MessageSender {
public void send(String content) { System.out.println("Email: " + content); }
}
abstract class Message {
protected MessageSender sender; // 桥梁:持有实现
public Message(MessageSender sender) { this.sender = sender; }
public abstract void send();
}
class AlertMessage extends Message {
public AlertMessage(MessageSender sender) { super(sender); }
public void send() { sender.send("[ALERT] " + getBody()); }
}
class PromotionMessage extends Message {
public PromotionMessage(MessageSender sender) { super(sender); }
public void send() { sender.send("[PROMO] " + getBody()); }
}
使用时灵活组合:new AlertMessage(new SMSSender()).send() 或 new PromotionMessage(new EmailSender()).send()。加新渠道?写个 PushSender;加新消息类型?写个 ReminderMessage——两边互不影响。
桥接 vs 其他模式:别和策略、装饰混淆
桥接不是策略模式:策略关注算法替换,强调“同一问题的不同解法”,且上下文通常不长期持有策略对象;桥接则强调“维度分离”,抽象与实现是天然正交的概念,生命周期常绑定。
桥接也不是装饰器:装饰器动态增强对象行为,侧重“功能叠加”,结构上层层包装;桥接是静态组合,目标是避免继承爆炸,结构扁平。
真正适合桥接的信号有三个:存在两个(或以上)独立变化的方向;这些方向未来都可能扩展;你发现子类数量因组合而失控。

















