桥接模式(Bridge Pattern)

定义

桥接模式是一种​​结构型设计模式​​,通过​​将抽象部分与实现部分分离​​,使它们可以独立变化。它通过组合代替继承,解决多层继承导致的类爆炸问题,适用于​​多维度变化​​的场景(如形状与颜色、设备与操作系统)。


UML 类图​

设计模式之结构型:桥接模式_桥接模式

核心角色

  • Abstraction:抽象层的接口(如形状、设备),持有对 Implementor 的引用。
  • RefinedAbstraction:对 Abstraction 的扩展(如圆形、方形),可添加额外逻辑。
  • Implementor:实现层的接口(如颜色、操作系统),定义底层操作(如 draw())。
  • ConcreteImplementor:具体的实现类(如红色、Windows),提供底层逻辑的实现。

优点​

  • 解耦抽象与实现​​:抽象层和实现层独立扩展,修改一方不影响另一方(如新增颜色无需修改形状类)。
  • ​​避免类爆炸​​:使用组合代替多层继承,减少子类数量(从 M×N 类减少到 M+N 类)。
  • ​​开闭原则​​:新增抽象或实现时,无需修改已有代码。
  • ​​运行时绑定​​:可在运行时动态切换实现(如切换渲染引擎或数据库驱动)。

缺点​​

  • 复杂度提升​​:需要正确识别抽象与实现的分离维度,设计难度较高。
  • ​​过度设计风险​​: 如果系统只有单一维度的变化,桥接模式可能增加不必要的复杂性。

​​代码示例(Java)​​

抽象与实现分离(形状 + 颜色)​

// 实现层接口:颜色
interface Color {String fill();
}// 具体颜色实现
class RedColor implements Color {@Overridepublic String fill() {return "红色";}
}class BlueColor implements Color {@Overridepublic String fill() {return "蓝色";}
}// 抽象层接口:形状
abstract class Shape {protected Color color;public Shape(Color color) {this.color = color;}abstract String draw();
}// 具体形状扩展
class Circle extends Shape {public Circle(Color color) {super(color);}@OverrideString draw() {return "圆形填充颜色:" + color.fill();}
}class Square extends Shape {public Square(Color color) {super(color);}@OverrideString draw() {return "方形填充颜色:" + color.fill();}
}// 客户端
public class Client {public static void main(String[] args) {Shape redCircle = new Circle(new RedColor());Shape blueSquare = new Square(new BlueColor());System.out.println(redCircle.draw());  // 输出:圆形填充颜色:红色System.out.println(blueSquare.draw()); // 输出:方形填充颜色:蓝色}
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.

​总结​​:桥接模式通过​​组合代替继承​​,解决多维度变化的复杂性,特别适合需要长期维护和扩展的系统。关键在于​​识别系统中独立的抽象与实现维度​​,并在设计初期通过桥接模式分离它们。