大战设计模式(第二季)【7】———— 从源码看桥接模式

发布时间:2025-01-03 21:50

前言

桥接模式看到名字就很容易理解,就是用一座桥将两个类连接起来,为什么要这么做是它的关键。当我们两个抽象对象相互之间有联系,且两个抽象对象的具体实现有组合的关系,那么为了减少类的数量以及为了方便后续的扩展,使用桥接模式就非常有必要。

桥接模式基础:https://www.cnblogs.com/linkstar/p/7783497.html

从jdbc来看桥接模式


看到这张图是不是有点懵了,觉得非常负责,这个是jdbc和druid对应connection之间的联系结构图。

不要急,我们一点点来看。

我们先来看实现关系。

这是不是简单很多,其中Driver是一个接口,然后又两个对应的实现(这里只是举例,当然还有很多实现)一个实现是com.mysql.cj.jdbc.Driver另一个实现是DruidDriver。
如果你用过jdbc那其实对它应该不陌生,jdbc在建立连接的时候需要通过Driver去注册驱动,从而获得对应的连接。
com.mysql.cj.jdbc.Driver是为了拿到对应的连接,从而通过连接来执行对应的数据库操作,而Druid你应该不陌生了吧,它是我们用过的一个连接池,其中维护了数据库的连接,所以它也需要通过Driver去注册。

然后我们再来看DriverManager

DriverManager其中一个list用于维护的是一个DriverInfo的list,而这个DriverInfo就包含了我们上面说的Driver

好了到这里他们之间的关系你应该已经理清楚了,那么我们说的桥接模式到底在哪里呢?不要急我们先来说说jdbc的设计原理。

假设如果让你去设计java对于数据库的连接,你会怎么样去设计?

jdbc的一个思路就是,面对市场上面那么多数据库,作为一个语言本身我不可能为了每一个数据库去建立一个对应的连接管理方式方法,从而去满足各个数据库。所以java制定了一个对应的规范,让各个厂商自己去实现这样的规范,从而让用户体会到的就是,无论是哪个数据库,其实操作的方式方法都是一样的,这就是java去设计jdbc的原理。

所以对于Driver和Connection都是接口,各个厂商来实现这样的接口,从而在DriverManager在使用的时候,可以非常规范。

比如在获取连接的时候,其中标箭头的就是我们之前说的list,因为Driver的接口一致但实现不同,所以最后获得的连接不同,但是连接又具有相同的方法,从而最后在使用上面又是相同的。(绕进去没有?)

最后我们再来补充一下原来的图

哦,原来是这样~是不是有这种感觉,这里我们可以看到桥了。然后你再想想桥接模式给我们的定义,最后再看看最上面提到的最复杂的图,是不是就豁然开朗了。

总结

当两个抽象的事务产生联系,通过中间桥梁将二者联系在一起,这样非常方便后续的扩展也并不会影响当前的使用。

网址:大战设计模式(第二季)【7】———— 从源码看桥接模式 http://c.mxgxt.com/news/view/653981

相关内容

转:设计模式与篮球
植物大战僵尸全明星传送带模式简析 承袭经典模式
湿式静电除尘器流场的数值模拟与优化设计
BOT+EPC模式详解:优缺点剖析及适用领域在现代项目管理和基础设施建设领域,BOT+EPC模式正逐渐成为业内的“明星选
互动碰撞 仪式准备 链化成效——《明星大侦探》第六季互动模式探析
解码卫视综艺节目大战 六大关键词聚焦节目模式引进
自主设计制造!世界首创!我国深水油田智能开发模式取得新突破
StarUML官方正式版(建模工具) v6.0.1 免费汉化版
基于LTCC内埋式元件设计与建模研究
快手与伊利牧场携手推出《闪亮的她》第二季,打造女性营销新模式

随便看看