桥接 (Bridge)
桥接 (Bridge) 是一种结构型设计模式,将抽象与实现分离,使它们可以独立变化;用组合关系代替继承关系,降低两个可变维度的耦合度。
- 抽象与实现混在继承体系中,导致类爆炸(如多种抽象 × 多种实现 = 大量子类)。
- 希望抽象层与实现层能独立扩展,而不是每加一种实现就派生一堆抽象子类。
- 抽象部分 (Abstraction):定义高层逻辑,持有一个实现部分 (Implementor) 的引用,通过组合调用实现。
- 实现部分:定义底层操作的接口,由具体实现 (ConcreteImplementor) 完成。
- 抽象与实现通过组合连接,可独立扩展;客户端依赖抽象,运行时注入具体实现。
classDiagram
class Abstraction {
#impl Implementor
+operation() void
}
class RefinedAbstraction {
+operation() void
}
class Implementor {
<<interface>>
+operationImpl()* void
}
class ConcreteImplementorA {
+operationImpl() void
}
class ConcreteImplementorB {
+operationImpl() void
}
Abstraction <|-- RefinedAbstraction
Abstraction o-- Implementor
Implementor <|.. ConcreteImplementorA
Implementor <|.. ConcreteImplementorB
Java 示例
Section titled “Java 示例”// 实现部分接口public interface Implementor { void operationImpl();}
public class ConcreteImplementorA implements Implementor { @Override public void operationImpl() { System.out.println("实现 A"); }}
public class ConcreteImplementorB implements Implementor { @Override public void operationImpl() { System.out.println("实现 B"); }}
// 抽象部分public abstract class Abstraction { protected Implementor impl;
public Abstraction(Implementor impl) { this.impl = impl; }
public abstract void operation();}
public class RefinedAbstraction extends Abstraction { public RefinedAbstraction(Implementor impl) { super(impl); }
@Override public void operation() { impl.operationImpl(); }}
// 客户端public class Client { public static void main(String[] args) { Abstraction ab = new RefinedAbstraction(new ConcreteImplementorA()); ab.operation(); // 输出: 实现 A }}桥接通过“抽象持有一个实现”的组合方式,让抽象与实现解耦、独立扩展,避免多重继承带来的类爆炸。