一、定义
将抽象部分与实现部分分离,使它们都可以独立地进行变化。
二、使用场景
一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。
三、UML类图

桥接模式
Abstraction:抽象部分。该类保持一个对实现部分对象的引用,抽象部分中的方法需要调用实现部分的对象来实现。
Implementor:实现部分。可以为接口或抽象类,一般情况下是由实现部分提供基本的操作,而抽象部分定义的则是基于实现部分这些基本操作的业务方法。
ConcreteImplementorA、ConcreteImplementorB:实现部分的具体实现。
四、实现
//实现部分的抽象接口
public interface Implementor {
public void operationImpl();
}
//具体实现A
public class ConcreteImplementorA implements Implementor {
@Override
public void operationImpl() {
//具体实现A
}
}
//具体实现B
public class ConcreteImplementorB implements Implementor {
@Override
public void operationImpl() {
//具体实现B
}
}
//抽象部分
public abstract class Abstraction {
private Implementor mImplementor;
public Abstraction(Implementor implementor) {
mImplementor = implementor;
}
public void operation() {
mImplementor.operationImpl();
}
}
//抽象部分的子类
public class RefinedAbstraction extends Abstraction {
public RefinedAbstraction(Implementor implementor) {
super(implementor);
}
public void refinedOperation() {
//对Abstraction中的方法进行扩展
}
}
//客户端
public class Client {
public static void main(String[] args) {
//客户调用逻辑
}
}
五、应用
例子:Android Window WindowManager

Window WindowManager 层次结构
其中Window为抽象部分的抽象接口,PhoneWindow为抽象部分的具体实现,WindowManager则为实现部分的基类,WindowManagerImpl为实现部分的具体实现。
六、总结
桥接模式理解很简单,设计却不容易,难点在于对抽象与实现的分离的把握,是否需要分离以及如何分离,对设计者来说要有一个恰到好处的分寸。