00:00
好了,同学们,我们来看一个关于适配器的案例,我们首先给大家讲类适配器,好吧,讲类适配器,那么类适配器的它的基本概念是什么呢?它首先会有个adapt类,就是刚才我们说的一个类,它通过继承,大家看到没有,它通过继承这个src类,比如说它是继承。我们这个被适配者。这个类,然后实现了这一个目标类的接口,也就是说到时这个。目标类呢,要通过这个接口来使用,那完成了从src到de的一个适配,那个还是说的很抽象,不要着急啊,一会有个案例,那现在呢,我举怎样一个案例呢?举一个生活化的案例,比如说在我们生活中呢,有一个这样的案例,充电器。啊,充电器,这个充电器来讲解适配器,比如说同学们看到这有个电源。我们这边是可以插进去的啊,这个这个两口我们插就在中国不在泰国啊插进去那我问大家。
01:02
我们这个手机能不能直接插上去呢?不行,为什么呢?因为这边出来的电源是222伏。220伏的一个电源,那么220伏的电源呢,我手机是不能用的,所以说我通过一个适配这个电源适配器把这个220伏的电源转成了一个五伏的电压。啊,就是220 220伏的一个电压,我通过这个电源适配器把它转成一个五伏电压,那么在这里我们要分析一下哪一个是。目标哪一哪一个是被适配的呢?准确的讲,被适配的就是这个220伏的电压。适配器就是个电源,电源适配器,而我们输出来的这个目标就是一个五伏的电压,输出来过后呢,我这个手机就可以用它。明白我的意思吧,因为他说出来肯定是从这个口述出来的嘛,但是从我们这个调用的效果来看,其实我们用的就是一个五伏的电压。好,这是我们的一个示意图,那同学们现在我们就来开始写写,之前呢,我们仍然画一个图解,这个图解我们画出这个类图。
02:09
这个类图很重要,是不是把类图画出来过后我们再走代码来,同学们打开eclipse。我们新建一个包包,这个包呢,因为讲的是适配器模式,所以说我写一个叫adapter。没问题吧,Adapter,那adapter呢,我们。啊,我们先来我们这个地方就直接使用适配器内适配器模式了,啊,我们就不转换了,就直接上了第一种方式。写个包包,因为这是类适配器,我就写个叫做点class。什么呢,Adapter?呃。没问题吧?那现在呢,我们在这里先建一个。类图。先建一个类图。好的,那现在呢,我们来说一下怎么来画这个图呢,首先。
03:01
首先我们先要找到被适配的这个类,OK,那同学们可以看到,我先拉一个类过来。哪一个呢?这个就是我们的一个VOVO。这个电压是220伏的220 220伏的电压标准电压。对吧,这是一个被准备被适配的一个类。那么这个类里面呢,它有一个方法,它有一个方法,这个方法就是比如它会输出一个220伏的。电电源电压好,我们写一个方法啊,叫output,注意听这个还是,呃,很有意思的,它输出了一个222伏的。220220伏的一个电压。好。但是呢,我手机用不了,我手机用不了,那怎么办呢?OK,我写一个接口。我写一个接口,那这个接口呢,我们取个名字叫什么呢?VOT干什么呢?这是一个接口,是一个五伏的,我要接受一个五伏的,好在这个地方我需要有一个方法,就说我这个。
04:13
五伏的电压里面有一个方法是要输出什么呢?Outpput,一个五伏的电压这个方法。看清楚了。这个是被适配的类,这个是我要适配的目标那个类的接口。好,那最终我要输出的这个类是什么呢?大家看到在这里呢,我有一个类叫做v VO voet adapter。Adapter OK,那这个类就是相当于说是我们的适配器类。那么他呢,要去继承,注意听他去继承我们这个220,因为只有他继承了,我们才能拿到220伏的电压。但同时,但同时他还要去实现输出五伏的这个方法,也就是说大家看到他在中间做了一个什么呀。
05:03
处理。他首先能够拿到220伏的电压,然后再转成一个五伏的电压。转转五伏电压过后呢,我们这个手机就可以用了,来朋友们phone。那么这个手机它怎么去使用我们这个呢?非常的简单,假如说在这里面我们有一个方法叫充电char char me。叫充电啊,CH,呃,Char充电怎么写的,Char charming charming。OK。他呢,怎么办呢,各位同学这个手我把这个换一下啊,因为这个地方。我要用这个接口。对,我用这个让这个手机去依赖。我们这一个接口,因为呃,依赖这个接口,其实本质是依赖我们这个adapter。就是通过因为你这个,呃,这个VO VO adapt这个适配器内已经实现了这个VOAGE5伏的,呃这个接口嘛,那显然我依赖这个接口,其实就是依赖。
06:07
我们这个doctor。是不是好,这是手机,那手机拿到这个地方过后,我们来调度的时候呢,同学们看到手机有了,那我们待会有个客户端,有客户端我就这样画就可以了,Client。这个呢,里面肯定要有手机。是不是啊,肯定我要用到手机嘛,我要手机充电呢,诶我在给这个手机xin的时候,给他传一个他就行了,好这个流程做完了。也就是说原先你这个手机是不能直接用它的,你你看啊,大家看这个示意你原先这个手机要去充电,你不能直接。不能直接用这个220伏的电压,呃,不能用,用手机肯定不能接受220伏,那不直接爆了吗。那咋办呢?好,我首先写了一个接口,这个接口里面有个五伏,就是它它只能充五伏的,所以说我这个里面会肯定会去实现,呃,这个手机里面呢,可能就会去调这个VVNT去充,于是这个适配器呢,就实现了输出五伏的电压,那我要输出五伏,我首先要有220伏的电压,我才能转成五伏,它这做了一个转,转完了过后呢,我再通过这个接口去依赖v vnt adapt。
07:22
这样就可以完成充电的任务了。对吧,他charging的时候,这个地方肯定是他这个方法里面肯定是这样子的诶。这个啊,他这个。他这里面就手机这里面大家如果说呃,要知道的话,Char charm里面肯定会用到VNT5伏这个接口,用接口给它引来起来,Client呢,用到手机和adapter完事了。好,这就是我们的类图,大家大致明白了没有,好,现在呢,我们来把这个代码一写,你就非常的清晰,你就非常的清晰,那首先。我们应该先写哪一个呀?被适配者来走一个。按照老师的流程,一一会就明白了,包了。
08:03
啊,应该怎么写的。VO是这样的,但是没写错吧,呃,222220伏。写进去。好,他这里面有一个方法,他这里面有个方法叫public int,比如说叫output。220伏,没吧,同学们。那么这有一个映射值,它原来这个电压是220伏,没问题吧,我输出一句话。说出怎样一句话呢?就是电压。电压等于加一下啊,加上我们这个二这个22C。四个亿嘛,这么多服。服。服,应该这样服吧。这没有这个符啊。呃,这个伏好电压是这么多伏,然后呢,我们把这个二。220伏的电压返回。就是source待会就写完了,也就是说这个类里面它会输出220伏的电压。
09:06
能理解啊,电压。电压,显然这个220伏的电压手机是不能直接用的啊,用了不是直接就冲爆了,于是呢,我写了一个接口。对,我写了一个接口来,不着急,这个接口呢,我要提供将来手机要用的那个接口方法,那这边写着V退,什么叫五福。是个接口啊同学们,那如果说写的好一点呢,可以写个I。是个I。好,那这个接口里面呢,我们要写一个方法叫public int干什么呀,Output。不服。大妈喜欢。啊,也就是说他呢,会给我们提供一个五伏的输出五伏的一个,呃,一个方法,输出五伏的一个方法,那谁来。做这个事情呢,把adapt来做,看现在这两个都都有了吧,这个有了,我们现在用一个VO adapter来把这个地方进行一个转换。
10:02
跟上我的思路。VO。然后呢?OK。那这里面这个适配器内他要做两件事情啊,因为我我现在是类适配器,所以说他要继承。继承谁啊,他先要继承VOLTAGE222。220伏的同时,它要实现这个接口,这个接口就是刚才老师写的这个接口。显然,此时此刻,这个方法我们必须将其拿下。对不对,那大家想一想哈,大家想一想。因为你这个。适配器。这就是适配器内。适配器类,它呢,继承了我们这个被适配的这个类。这个是不是这个是被适配的类啊,我们是不是忘了写了。这个是被适配的。被适配。适配的类。
11:01
这个是适配接口。这个是适配接口。适配接口。OK,那现在,呃,因为我这里面继承了它,所以说我能用它这个方法,因此我先第一步先拿到,我先获取到,获取到220伏的电压。这个大家应该很好理解,对吧,我先用一个原来接收,那就是output。二零我就要拿到一个220伏的电压,但这个二十二百二十伏电压我不能直接输出去,我怎么办呢?诶,我把它进行一个处理int,我们把它转成一个目标需要的电压,目标电压。对不对,那目标电压呢,就是我们最原始的电压,目标电压怎么办?我们把它降压,比如说除以。呃,四四就说比如你这进行一个处理嘛,五伏,那就2205除以除以四四不就完了吗?除完了过后,我们把这个处理过后的电压返回就可以了。
12:01
诶,你看这就这么,就相当于说在做一个适配,我拿到是2220伏,然后我把它转成。转成什么呢?转成五伏。啊,如果是,呃,我们硬件的话,电器电器的话,那就是它里面有一些电器的基本原理,把它进行降压就完事了。理解我的意思吧,好的,那这个做完了以后,我们还差什么呀,我们还差一个手机要去用它,手机就可以用了,来走一个。加油类。那同学们想一想哈,你这个手机,你这个手机要去用的话,你。你是怎么用呢?首先我们写一个充电的方法。充电。好充电。充电,那充电呢,我就写个public public void什么。Charming,那我在冲的时候,我肯定要拿我以这个接口来依赖我们这一个适配器内,是不是,那这写个叫做接口,我们就简单一点。
13:08
取个名字,把这个大写的I改成小写的I就完事了。对不对,充电,那这个时候呢,我们就判断,如果。如果我们。诶,我们这一个接口哈,五福这个接口它得到。一个就是五福。它返回的就是五伏,那么这时呢,我们就输出一句话,就说电压五伏可以开始通电了,电压。哎,电压为五伏,可以充电。可以充电。没问题吧,可以充电,那如果说你这转的通过你这输出来,你输的不是五伏怎么办呢,那我就。没法充电了是吧,L1,那如果说你输出来的这个呢,跟我想的不一样,大于了五伏。OK,那这个时候呢,我们就提示另外电压过高无法充电,那其实这个地方我们明确就是五伏,只是我下一个判断呢,可能呃,你你这个,比如说你你这个。
14:10
这个转换接口,呃,有有几种情况对吧,我都可以考虑到,比如你说的就不是五伏,怎么办呢?电压大于五伏。大于。五伏无法充电,不能充电要爆。对吧,不能充电。好的代码我们就写完了,那从这里面我们可以看出来,就是我们这个手机呢,是依赖VO,通过这个接口依赖,但是传的时候肯定传的还是一个adapter,明白意思吧,最后我们有客户端来调一下。来写一段代码,叫client。把主方法勾上。上,那现在我们怎么来使用呢?非常的简单,非常简单。首先。我们先写一个提示,现在我们用的是类写就啊叫类适配器。类是。
15:00
配器模式。对不对,因为后面我们还有两种。适配器模式嘛,以示区别,首先我们先创建一个手机。放。Form。然后呢,我们给这个手机充电。点char charming,然后这边我们又一个adapter叫传进去就可以了。谁呀,传进去完事。啊,这样就可以搞定,那同学们一定要注意哈,我们被适配的在这里面,我们准确的讲被适配的类就它。它可以输出220伏,那么我们目标输出来的是什么呢?这个是目标它要调用的方法,也就是说你可以理解是是手机在这里面这个方法。是我们最终最终要用的。啊,最终要用的就是它,它被适配完了功能,我通过这个接口来调用我们适配。的这个方法嘛,对不对,我们四倍方法就是OUTPUT5伏。
16:01
好的,那这样子,呃,识别完了,我们来使用一下,看看代码能否正常的运行跑一个。我们可以看到,我们可以看到电压原先是220伏。啊,通过我们的一个适配器这个方法,适配器内在里面实现这个方法以后呢,把220伏电压转成了一个五伏电压,可以充电了。所以说我在这里面呢,呃,给大家讲了哈,就是五伏这个电压才是我们最终要要的这个结果,并不是手机哈,同学们千万不要认为是手机,是我手机是我们目标,其实手机它是用这个五伏的电压。准确的讲就是我们这输出这个结果,就转换过后这个结果哪个呢?大家可以看到在这个适配器里面,它返回的这个。电压才是我们最后要的这个结果。明白。好的,呃,那关于这个案例呢,我们就聊到这里,最后我总结一下类适配器的注意事项。我们可以看到这个类适配器呢,因为Java是单继承机制,所以类适配器呢,它必须要继承这个圆内,你看我们是不是继承到VNT220V这个这个类啊,这算是个缺点,因为它必须继承,我们以前讲过继承这个玩意啊,它不好就是尽量不要用继承,但是你这个类适配器呢,用到继承的,所以这是个缺点,后面我们会改进。
17:25
呃,所以说这个,因为这个时候我们要求DC必须接口,所有一定局限性,因为你要继承第二个src类的方法,在adapter中会暴露出来。啊,在adapter会暴露出来,也增加了它使用成本,这句话怎么理解呢?大家可以看到在这里是不是我们在适配的时候,我们调用了outut的220符,那就也就是说这个方法本身是谁的呀?是我们这个source。就是被适配的这个类的方法,因此呢,他暴露了,他一旦暴露呢,就增加了使用成本,因为我这写的比较简单,好像没有什么关系,但如果多了的话,你可能要用到很多与被适配的这个类的方法,就成本就比较高了。
18:05
第三点,由于其继承了src类,所以我们可以根据需求重写src类的方法,使得呢灵活性增样,这是它的优点。就是说虽然我们继承带来一些缺点,他有带来一些优点,就是你可以重写啊,你还可以重写它。哎,但是这就是我们的一个分析嘛,有不好的地方,也有好的地方,不好的地方就是刚才老师所分析的,他要继承这个类,因此呢,我们,呃,这个继承就让我们的适配器类和这个被适配的类它的。耦合度变大了。同时呢,我们有可能还会在这这个adapter里面去使用被适配的类的方法,这个增加成本,但同时呢,我们又可以重写,又带来一些灵活的地方,所以说类适配器呢,有好也有不好的地方,同学们要做一个充分的了解,充分的了解OK,同学们,那关于我们这个类适配器的讲解就先到这儿,那么下面呢,我们会接着给大家讲解对象适配器,看看它有什么。
19:07
改变没有,好了,关于类适配器呢,这个模式我们下一讲为大家讲解。
我来说两句