桥接模式

桥接模式是一种结构型设计模式,英文是 Bridge Design Pattern。在 GoF 的《设计模式》一书中,桥接模式是这么定义的:Decouple an abstraction from its implementation so that the two can vary independently。翻译成中文就是:将抽象和实现解耦,让它们可以独立变化。单从官方概念来理解,相当晦涩,通常对抽象与实现的第一反应就是接口(或抽象类)与实现类的继承关系,接口和实现独立变化就更加让人难以理解。

关于桥接模式,还有另外一种理解方式:一个类存在两个(或多个)独立变化的维度,我们通过组合的方式,让这两个(或多个)维度可以独立进行扩展。再配合类图(https://zh.wikipedia.org/wiki/%E6%A9%8B%E6%8E%A5%E6%A8%A1%E5%BC%8F)就比较容易理解一些。

 

Bridge UML class diagram.svg

桥接模式所涉及的角色有:

  • 抽象(Abstraction)角色:抽象角色,采用抽象类方式,并持有一个实现角色对象的引用。
  • 具体抽象(RefinedAbstraction)角色:具体抽象角色具体实现。
  • 实现(Implementor)角色:给出实现角色的接口。实现化角色应当只给出抽象层操作,抽象角色持有抽象角色并只给出基于抽象角色的操作。
  • 具体实现(ConcreteImplementor)角色:这个角色给出实现角色接口的具体实现。

可以看到抽象和实现是两个角色,是调用者和被调用者的关系,通过组合关系使抽象角色持有实现角色,通过组合关系来替代继承关系,避免继承层次过多。

接下来通过代码理解一下桥接模式,当我们办理银行卡时,有不同的银行(工商银行,建设银行)可选择,每个银行有不同的卡(储蓄卡,信用卡),所以银行和卡就相当于两个独立变化的维度,我们将银行和卡进行抽象,将银行作为抽象角色,将卡作为实现角色,通过组合的方式使银行持有卡的接口引用,将其组合在一起。

public class BridgePattern {

    /**
     * 银行抽象类,桥接模式的抽象部分
     */
    abstract static class Bank {
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值