桥接模式

一、定义

将抽象部分与实现部分分离,使它们都可以独立地进行变化。

二、使用场景

一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。

三、UML类图

桥接模式_第1张图片
桥接模式

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

桥接模式_第2张图片
Window WindowManager 层次结构

其中Window为抽象部分的抽象接口,PhoneWindow为抽象部分的具体实现,WindowManager则为实现部分的基类,WindowManagerImpl为实现部分的具体实现。

六、总结

桥接模式理解很简单,设计却不容易,难点在于对抽象与实现的分离的把握,是否需要分离以及如何分离,对设计者来说要有一个恰到好处的分寸。

你可能感兴趣的:(桥接模式)