JAVA设计模式——桥接模式

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

桥接模式涉及4个角色:

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

结构图:
这里写图片描述

具体代码实现:

实现:

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");
    }
}

桥:

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 is A
this is B


应用场景:

  • 当不希望在抽象和实现部分采用固定的绑定关系时,可以采用桥接模式,来把抽象和实现部分分开,然后在程序运行期间来动态的设置抽象部分需要用到的具体实现,还可以动态切换具体的实现。
  • 如果出现抽象部分和实现部分都可以扩展的情况下,可以采用桥接模式,让抽象部分和实现部分可以独立的变化,从而可以灵活的进行单独扩展,而不是搅在一起,扩展一边可以影响另一边。
  • 当希望实现部分的修改,不会对客户产生影响时,可以采用桥接模式,客户是面向抽象的接口在运行,实现部分的修改,可以独立于抽象部分,也就不会对客户产生影响了,也可以说对客户是透明的。
  • 如果采用继承的实现方案,会导致产生很多子类,对于这种情况,可以考虑采用桥接模式,分析功能变化的原因,看看是否能分离成不同的维度,然后通过桥接模式来分离他们,从而减少子类的数目。
  • 一个典型的桥接模式应用例子:JDCB的DriverManager。DriverManager这个类就是桥,具体的MysqlDriverOracleDriver等就是具体的实现。具体可以阅读源码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值