跳转到内容

桥接 (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
// 实现部分接口
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
}
}

桥接通过“抽象持有一个实现”的组合方式,让抽象与实现解耦、独立扩展,避免多重继承带来的类爆炸。