JAVA设计模式——桥接模式

桥接模式是一种结构型设计模式。桥接模式的思想是:将抽象部分与它的实现部分分离,使它们均可以独立地变化。桥接模式将继承关系转换为关联关系,从而下降了类与类之间的耦合。java

桥接模式涉及4个角色:web

  • 抽象桥(Abstraction):客户与实现之间的中间链接,指向抽象实现。
  • 具体桥(Refined Abstraction):桥的实现类。
  • 抽象实现(Implementor):实现(这里的实现不是指实现类,是对某个功能的实现)的抽象接口。
  • 具体实现(Concrete Implementor):某个功能具体的实现。

结构图:
这里写图片描述sql

具体代码实现:设计模式

实现:ide

public interface Implementor {
    void method();
}

public class ConcreteImplementorA implements Implementor {
    @Override
    public void method() {
        System.out.println("this is A");
    }
}

public class ConcreteImplementorB implements Implementor {
    @Override
    public void method() {
        System.out.println("this is B");
    }
}

桥:svg

public abstract class AbstractBridge {
    private Implementor impl;

    public Implementor getImpl() { return impl; }

    public void setImpl(Implementor impl) { this.impl = impl; }

    public abstract void method();
}

public class Bridge extends AbstractBridge {
    @Override
    public void method() {
        getImpl().method();
    }
}

客户:测试

public class Client {
    public void use(AbstractBridge bridge) {
        bridge.method();
    }
}

// 测试
class BridgeTest {
    public static void main(String[] args) {
        Client client = new Client();
        AbstractBridge bridge = new Bridge();

        // 实现A
        bridge.setImpl(new ConcreteImplementorA());
        client.use(bridge);

        // 实现B
        bridge.setImpl(new ConcreteImplementorB());
        client.use(bridge);
    }
}

运行结果:this

this is A
this is Bspa


应用场景:设计

  • 当不但愿在抽象和实现部分采用固定的绑定关系时,能够采用桥接模式,来把抽象和实现部分分开,而后在程序运行期间来动态的设置抽象部分须要用到的具体实现,还能够动态切换具体的实现。
  • 若是出现抽象部分和实现部分均可以扩展的状况下,能够采用桥接模式,让抽象部分和实现部分能够独立的变化,从而能够灵活的进行单独扩展,而不是搅在一块儿,扩展一边能够影响另外一边。
  • 当但愿实现部分的修改,不会对客户产生影响时,能够采用桥接模式,客户是面向抽象的接口在运行,实现部分的修改,能够独立于抽象部分,也就不会对客户产生影响了,也能够说对客户是透明的。
  • 若是采用继承的实现方案,会致使产生不少子类,对于这种状况,能够考虑采用桥接模式,分析功能变化的缘由,看看是否能分离成不一样的维度,而后经过桥接模式来分离他们,从而减小子类的数目。
  • 一个典型的桥接模式应用例子:JDCB的DriverManager。DriverManager这个类就是桥,具体的MysqlDriverOracleDriver等就是具体的实现。具体能够阅读源码。