00:02
调节模式,它在JDBC源码中的一个剖析。那么在JDBC,哪个在我们JDK里面哪个地方用到了调节模式呢?我们来分析一下,是在这个位置同学们。在JDBC这个driver接口。如果从调节模式来看呢,你可以把这个driver当成是个接口,下面呢,有myc的driver,有our的driver,就可以把这个当做是实现接口的类,下面我们来看一下这个代码哈,我们来看一下代码怎么来看,然后呢,我们画一个类图大家就明白了。嗯,这个我先给大家讲一下,就是在这个调节模式在JDBC这边用的呢,它并不是像我们想象的是一个非常标准的,呃,这个调节模式已经很像,但是但是呢,跟我们讲的标准的有一点点差距。他具体在哪个地方有不一样的,不一样的不一样的地方呢?我们来分析一把,那首先我们打开这里,我建立一个my bets,待会在这面我写一个文件,因为在这里面我会用到一些关于数据库的操作的一些炸包,所以说我在这个地方去写案例,好我建一个类。
01:13
好,在这里面我们写个bridge。OK啊,那这边写个主方法,那首先我们看一下。我们先来看看,在这个源码里面有一段代码是这个driver,我们先把这个driver类大家看一下。来看一下同学们。Driver类的源码,我们啊,Driver。走一个。打开它,我们一看看,在这个driver里面,我们找到MY这个driver,我们发现这个driver里边同学们看啊,这个driver里面呢,它实际上是它,它既实现了这个driver这个接口。是吧,实现了一个接口,那这个driver里面具体来说,它最核心的代码在哪里呢?就在这儿。是不是他用这个driver把,呃,他通过这个注册一个driver,看我这写的通过。
02:04
呃,注册驱动调用driver manager里面的这个get connection,我们就可以拿到一个连接,就是他先注册,注册过后呢,拿到一个driver manager,通过这个driver manager呢,我们可以拿到一个get collection,拿到一个连接,那现在我们来看一下driver manager它是怎么做的。他这里面一个连接是怎么找到的,来跟着我的思路,那首先我们来看一下drive manager往里面看。这个driver manager比较有意思哈,大家看它在这里呢,并不是一个抽象的类,它就是一个具体的类了,在这里面呢,我们可以看到,来同学们往下看,这里面有一系列的get connection。是不是get get connection这有是吧,那么这个connection是个什么东西呢?看一下。往这里面,我们发现connection是个接口。它是个接口。对,那这样四个接口里面肯定就有一系列方法,刚这边的方法就是我们刚才看到的像get connection这些地方都有,对吧。
03:03
要往下走。是不是get呀?在这里面呢,我们可以看到它有,它有一系列的方法需要我们去实现。这个driver就是这个connection里面呢,它是一个接口,里面有一系列方法需要我们去实现。那问题来了。就说这个connection是一个接口,那么这个connection下面。既然你是个接口,它下面有没有具体的实现子类呢?好,我们来看一下,当我们往这一追,我们发现诶有一系列的看到没有,你看这同学们看这里啊,同学们注意跟上我的思路,这是一个接口,它下面呢,有这个接口,诶同学们看。这两个接口的位置可不一样啊,这是java.circle里面的connection接口,这是com.MYJDBC下面接口,而我们可以看到connection。就是com.MYSQL减DJDBC这个connection接口下面才有一个具体的connection的一个实现之类,就有点类似于我们这这个接口下面是跑了跑了建了一个connection,再写在在下面具体实现的,那我画一个类图,大家来理解一下刚才这个示意啊来同学们不着急,我们针对这个桥件模式把它源码里面的角色给分析一下,注意听。
04:28
把这个图一画,你们就明白了,不画图很难理解哈,很难理解,来,我画个图。呃,首先一个接口,这这个接口是我们Java,注意听java.circle下面的connection接口。啊,是不是这样的道理,而这个接口下面呢,还有一个接口,按理说接口下面就应该是实线子类了,跟我们前面前面讲的接口下面就应该是。实现这个接口的,呃,那个那个子类,但这里不是,它还有一层,这层是什么呢?com.MYSQL。
05:02
点JDBC。点connection是这样子吧,也就是说他呢去。但这个接口和接口之间,我们还是说的是泛化是吧,他继承它,那么在这个connect上面是不是就有我们这个内容呢?就是同学们刚才看到的这个叫connection。Connection,这个这个时限之内。也就是说他去实现了这个接口,这样写画对不对呢?这样画是不对的。不对,因为这个connection employment这个类啊,你们发现其实他没有直接去实现。这个。这个connection它是只实现了另外一个接口,我们这这样话是少画了一层,知道吧,我们来查一查这个connection employment到底是它是怎么走的啊,来来,同学们不着急,我们。把这个源码放过来。
06:00
好,我保存一下。那诶刚才这个没有粘过来吗。好,我们来看一下在这。我们来看一下它到底是怎么来的。好诶这个怎么粘不过来呀,这玩意儿。再来粘一下。再来粘一下,然后我在这再复制一下啊。张,不知道怎么回事,看。Ipl,好,我们催一下这个源码。往下看。好,这个源码你这追不出来了,诶诶追出来了啊,这个怎么回事,看他这这个类,它实际上实际上是实现的这个MY。Connection,也就是说他其实啊,实现的是另外一个接口。这个接口。OK啊,那大家可以想象哈,也就是说它实现这个接口,那这两个接口之间是什么关系呢。大家想知道吧,就这两个接口之间有没有关系呢?有关系我们看一下源码你们就知道了,MySQL SQL connection呢,其实它呀。
07:08
是继承了。这个接口也就是说你看这个很麻烦的,就是说这个不像我们讲的刚才讲的那种方式,就是说一个接口下面直接就是它的实现子类,而中间又经过了好几个接口,那我们来看一下MySQL connection。MySQL connection这个接口是不是继承了这个里面的这个connection接口,我们查一下源码,刚好这我有有个源码包,我把这个源码包呢给大家看一下啊,来打开。我们这边的资料,这个资料里面有一有一个MYSQL的源码包,我们最近去看一下,了解一下,看下边有个MYSQL,有个JDBC。对,在这呢,我们找到找到这个接口my circle口好,我们找一下是不是在这啊。
08:02
是他打开他看一下。那打开它看一下,你会发现这个类啊,这这不是,这也不是类啊,这是个接口,它呢去继承了这个接口,而这个connection是哪里的呢?是这个包包下面的是不是啊,所以说他们的之间的关系其实是这么一个关系,很麻烦啊,那当然有同学说了,说老师,那你这个是MYCQ这条线,那如果是Oracle呢,Oracnkle也是类似的,我就简单画一个啊,比如说Oracle。Oracle的这个类类这个连接啊,Oracle的这个数据库类似,数据库类似。类似,那大家有没有发现这个就很像了,很像什么呀,我们把这个连一下。啊,连一下,当然这这条线。就是Oracle数据库去拿到一个连接,也是也是类似的,就是我没有完全化了,没有完全画好,这边就是我们的具体实现,那么这个抽象类在哪去了呢?各位同学,这个抽象类没有了,他直接就是这个driver manager。
09:11
A manager,也也就是说我们桥接模式的一个标准写法,应该是这边是实现,这边是什么呀。呃,抽象的定义,但是呢,这里没有,他直接这个driver manager呢,就可以去跟去拿到一个connection了,你大家还记不记得,在我们这个刚才给你们看的driver manager这个类里面,它其实已经有一系列的get方法了。他get,返回一个connection。对不对,那这个connection到底是MY的connection好,是的,Mynkle的connection呢,根据它注册的时候这个驱动不一样,而返回对应的这个connection,所以说它在这呢,就跟我们标准的桥接不太一样,但是还是用它桥接起来了。
10:01
还是调节起来,怎么调节呢?好放话啊,这个地方你来他过来就可以了。好,这是这样的,那么我们的client端怎么用的呢?我们端。就直接使用这个driver manager。啊,再通过这个drive manager里面的get connection就可以拿到一个具体的连接,比如是MY的一个链接,还是Oracle链接,就这么一条一条线,大家看懂了没有?啊,所以说最后这个源码就这样分析出来的。明白,所以说呃,大家看到呢,这这个地方跟我们有点不一样,按理说下面应该有一些怎么样,有一些这个有有一些子类来怎么样来继承,来继承我们这个drive manager,但是他这没有啊,他就直接就呃实现了get connection这边是一样的。这边基于接口的实现是一样的,但是基于这个类的这个抽象这层他就拿掉了,所以说我在前面讲过,有时候我们分析源码呢,跟我们标准的这个设计模式会有一点小小的出入,这个是正常的,但核心思想还是一样,对不对,核心思想还是一样,OK,好,同学们,那关于。
11:05
关于这块,呃,这块的这个源码的分析呢,我们就到这里好吧,到这里OK。那关于源码的分析,我们就聊到这里。
我来说两句