结构型-桥接模式
2026/1/15大约 3 分钟Java设计模式结构型模式桥接模式Java设计模式面向对象架构设计最佳实践代码优化
概述
桥接模式(Bridge Pattern)将抽象部分与实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体模式或接口模式。
适用场景
- 不希望抽象和实现之间有固定的绑定关系
- 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充
- 对一个抽象的实现部分的修改应对客户不产生影响
- 想在多个对象间共享实现
角色组成
- Abstraction(抽象化):定义抽象类的接口,维护一个指向Implementor的引用
- RefinedAbstraction(扩展抽象化):扩展Abstraction
- Implementor(实现化):定义实现类的接口
- ConcreteImplementor(具体实现化):实现Implementor接口
代码实现
1. 实现化接口
// 颜色接口(实现化)
public interface Color {
void applyColor();
}2. 具体实现化
public class RedColor implements Color {
@Override
public void applyColor() {
System.out.print("红色");
}
}
public class BlueColor implements Color {
@Override
public void applyColor() {
System.out.print("蓝色");
}
}3. 抽象化
// 形状抽象类(抽象化)
public abstract class Shape {
protected Color color; // 桥接
public Shape(Color color) {
this.color = color;
}
public abstract void draw();
}4. 扩展抽象化
public class Circle extends Shape {
public Circle(Color color) {
super(color);
}
@Override
public void draw() {
System.out.print("绘制");
color.applyColor();
System.out.println("圆形");
}
}
public class Rectangle extends Shape {
public Rectangle(Color color) {
super(color);
}
@Override
public void draw() {
System.out.print("绘制");
color.applyColor();
System.out.println("矩形");
}
}5. 客户端
public class Client {
public static void main(String[] args) {
Shape redCircle = new Circle(new RedColor());
redCircle.draw();
Shape blueRectangle = new Rectangle(new BlueColor());
blueRectangle.draw();
}
}# 输出
绘制红色圆形
绘制蓝色矩形类图
实际案例:消息发送
// 消息发送方式(实现化)
public interface MessageSender {
void send(String message);
}
public class SmsSender implements MessageSender {
@Override
public void send(String message) {
System.out.println("短信发送: " + message);
}
}
public class EmailSender implements MessageSender {
@Override
public void send(String message) {
System.out.println("邮件发送: " + message);
}
}
// 消息类型(抽象化)
public abstract class Message {
protected MessageSender sender;
public Message(MessageSender sender) {
this.sender = sender;
}
public abstract void sendMessage(String content);
}
// 普通消息
public class NormalMessage extends Message {
public NormalMessage(MessageSender sender) {
super(sender);
}
@Override
public void sendMessage(String content) {
sender.send("[普通] " + content);
}
}
// 紧急消息
public class UrgentMessage extends Message {
public UrgentMessage(MessageSender sender) {
super(sender);
}
@Override
public void sendMessage(String content) {
sender.send("[紧急] " + content);
}
}
// 使用
public class Client {
public static void main(String[] args) {
Message normalSms = new NormalMessage(new SmsSender());
normalSms.sendMessage("会议通知");
Message urgentEmail = new UrgentMessage(new EmailSender());
urgentEmail.sendMessage("系统故障");
}
}# 输出
短信发送: [普通] 会议通知
邮件发送: [紧急] 系统故障JDBC 中的桥接模式
// JDBC 桥接示例
Class.forName("com.mysql.cj.jdbc.Driver"); // 加载具体实现
Connection conn = DriverManager.getConnection(url, user, password);优缺点
优点:
- 分离抽象接口及其实现部分
- 提高可扩展性
- 实现细节对客户透明
缺点:
- 增加系统的理解与设计难度
- 要求正确识别出系统中两个独立变化的维度
桥接模式 vs 适配器模式
| 特性 | 桥接模式 | 适配器模式 |
|---|---|---|
| 目的 | 分离抽象和实现 | 接口转换 |
| 使用时机 | 设计阶段 | 已有系统 |
| 关注点 | 两个维度独立变化 | 兼容性 |
