00:00
接口适配器模式,那前面我们讲了类适配器模式,讲了对象适配器模式。那适配器模式呢,还有最后一种就是接口适配器模式,我们来来也来了解一下,那么有些书上呢,把这个。把这个接口适配器模式呢,也称之为缺省。适配器模式有这个叫法哈,它是什么一个意思呢?他说当不需要全部实现接口提供的方法的时候,就是我这个接口有很多方法,但是你有可能。并不想全部实现。啊,你你有你有选择性的对不对,那这个时候我们可以怎么说呢?我们可以先设计一个抽象类,这个抽象类呢,把所有的接口都实现了。啊,那那有时候说把这个接口所有方法都实现,那还叫抽象类吗?它是这样子的,它有很多只只是提供一个默认的实现及空方法,也就是说这个抽象类呢,它只是实现,但里面具体的内容他没有写。
01:00
OK,那么该抽象类的子类就可以有选择的覆盖覆类的某些方法来实现需求。大家明白我的意思吗?就是说假如这有个接口I。对,这接口I,这个I里面呢,有M1这个方法,有M2这个方法,有M3这个方法明白。那现在呢,我有一个类叫A类,这个A类呢,我把它做成一个抽象的,我让他去实现这个这个I这个接口里面所有方法,但是它只是一个默认实现,即空方法。能理解空方法,OK,那现在如果我这个这个也是个适配器,这也是个适配器,那么如果我有一个B类要用的话呢,我我怎么办呢?我就用这个AA的这个这个方法就可以了,诶我用这个AA这个方法A这个对象实例,那么我就可以有选择的去覆盖。因为你尤其是空方法嘛,你空方法至少至少就是说这个M1M2M3,你这个抽象类已经把它给怎么样实现了,那么我这个B干什么呢?这个币要去用它的时候,我只需要去干什么呢?我只需要去有。
02:12
有选择的去覆盖,去覆盖A这里面已经实现的方法就行了。啊,大家知道我在说什么没有,可能有些同学还没明白哈,没明白没,没关系,待会儿呢,我会举个例子。嗯,它适用于一个接口,不想使用其所有方法的情况,就可以用接口适配器模式,我举个例子,我举个例子大家可能就容易理解了,说现在呢,在安卓里边,大家有些同学用过安卓,有些同学没有用过安卓这个源码哈,那我简单解释一下,这个安卓里面呢,有一个类属性动画这个类,这个类呢,它可以加监听器。加监听器,那大家可以看到,在加监听器的时候,我们可以看到这边,这边有一有一段代码,大家可以看到。他在加监听戏的时候呢,其实他溜的是这样一个东西。
03:04
六个是什么呀?呃,Animator animator listener。在这里面呢,它有四个方法。看到没有,他这有四个方法,这四个方法都被他实现了。都被大家实现了,但是同学们有发现有可能呢,有可能我只需要其中的。一个方法,也就是说我我在加监听器的时候呢,我只想去实现对动画开始的这么一个监控,能理解吧,就是另外这三个方法我并不关心。我并不关心,所以说我在用的时候呢,我实际上是这样用的,大家看到。这我又一个animator listener。这个adapter。是一个什么呀?是一个监听适配器。监听适配器,那么这个监听适配器里边呢,大家有发现哈,我在这里面只去重写了这个监听动画开始的方法,另外几个我不需要去写。
04:06
为啥呀,因为你你这已经默认实现了嘛,所以说我可以不去管,我只覆盖我关心的,然后我再点到就可以了,是这个意思。明白啊,那有些同学老师这个还是有点不明白,不明白,我再举个例子,大家看我再举个例子,这个例子就比较形象的说明这个事了,说现在有一个接口。Animator listener里面有四个方法。有四个方法看清楚了啊,然后呢,这边还有一个接口animator passer也是一个接口,我现在有一个。我现在有这么一个需求。就是这个适配机接这个接口里面的方法呢,我在用的时候可能有些想去使用,有些不想使用,我怎么办呢?我这里做了一个抽象的类叫animator adapter看。这个类是一个抽象类。OK,是一个抽象类,它是一个抽象类呢,去实现了这两个接口,一个是同学们看到这个接口,还有一个是这个接口我实现的时候,大家可以看我怎么实现的,我全部是以默认方式实现的,即里面不写任何的东西,看清楚没有,也也就是说我们这个类虽然是抽象类。
05:19
但是呢,这个adapter他其实是把他所有的这个接口里面的方法都默认实现了。是空方法。空方法,那空方法我用的时候呢,如果我只关心这个十大方法,你看我怎么用的,看下面一句话,在程序里面呢,我的这个匿名内部类listen就是一个具体时间类,就说我我有个匿名类,看啊这里我六。我有一个anim listener adapter在这里面呢,因为大家也知道这个anim,这个animator animator listener adapter,它是个抽象类,对不对。但是抽象类呢,它如果是以匿名类不类的方式,是可以去创建一个对象实例的,那这边呢,我重写其中我关心的方法就可以了。
06:09
那有些同学说这个怎么含义还是有点模糊了,我画一个图来,同学们我画一个图,我画一个图,可能同学们就更更能理解,老师想说什么,来,我画一个图啊,来现在呢,我们是个接口interface。Adapter adapter OK。好,现在呢,我画一个示意图,帮助同学们理解。来画一个类图。放进去。那怎么说呢,说现在我有一个接口。OK,假设是INTERFACE4,我里面有很多方法啊,一个。两个。三个。四个OK了,就OPERATION1234。那现在呢,我做一个类,这个类是个抽象类,比如说我写个叫abstract,这个这个四个亿啊,Abstract abstract。
07:03
就简写ABS,这有个类比,这是A吧,这个类。那这个类里边呢,我让我让他去实现这个接口。显然我实现这个接口,我既然是实现这个接口的话,我肯定会把这里面方法都实现一把,但是是空实现,所以说我在这里面我写一句话。什么呢?就是ABS。A。BA,这个类呢,它首先是一个抽象类。嗯,他出现了干什么,他去空实现或者叫默认实现吧,默认实现这个接口的接口的所有方法。大家理解啊。啊,他实现。他的这个默认方法。好的。那现在我要用这个,这个是adapter,同学们,这是个adapter。就是adapter。
08:00
A。OK,那现在我要用这个适配器的时候,我怎么用呢?同学们可以看到我在用的时候,比假如我这有个类叫做A类。A类,那在这个A类里面,我要用的,我直接用它。也就是说我可以去使用它,使用它的时候,因为你这个ABS adapt已经把它所有方法空实现了。但是有可能我这个A类里面呢,只关心里面的OPERATION1,那我怎么办呢?我就用匿名内部类的方式来重写这个OPERATION1就行,其他空方法我不去管它就可以了,来我用代码给他实现一遍,大家可能就形象的知道了,来走一个,首先呢,我先建一个接口,好吧,就必须叫I interface。啊,是。没问题吧?啊,这里面呢,我们写几个方法。简单试一下,比如比方说我们这边有这么几个方法,Public void。贸易的什么呢?C啊,比如说M1我就四个亿。
09:01
M1M2M3M4。好三四个方法。好的。四个方法,这样就写完了,写完过后呢,我做一个抽象类,同学们注意听我做一个抽象类哈。就叫ABS。ABS,嗯,刚才是ABS adapter adapter没问题吧。它是个抽象类,所以说我abstract做一下。那这边呢,我去实现这个接口。哪个接口呢?就是刚才我写的INTERFACE4。显然这里面的方法呢,因为我是一个抽象方法,其实我可以不去实现,但是呢,我这里面让它空实现在哪里呢?在。ABS adapt里面。我们,我们将什么呢?将I interface4里面所有方法控实现的方法进行默认实现。好,默认时间就比较简单,我就写一下啊,Public void m1。
10:00
对吧,M1OK,那这边就就M1我就空实现嘛,然后。M2M3M4。这边是。二这边是三,这边是四。没问题吧?好,那我在用的时候,比如说我这有个客户端,我要去用我们思维器,我怎么用呢?来看一下。那么在用的时候,比方说我这有个主方法。我这有个主方法,Me。我用的时候怎么用六。一个is。显然同学们都知道,因为你这是抽象类,所以说他需要从他这看呢,他需要你把这个方法都实现,但其实我们这可以不不实现啊,因因为我实际上这个抽象类里面的方法其实都已经实现过了,只是空实现而已,这个就是我们说的默认实现。那现在假如我们只对M1,我们只想使用到我们的interface里面试的这个M1方法,你看我只需重写哪个呢?
11:05
呃,这就体现出他这个接口适配啊,如我们只需,我们只需要,只需要去覆盖,覆盖我们关心的,我们需要使用的这个接口方法。是不是,那我关心的是哪一个呢?显然是M1写进去就完事,比如说我们重写它了。System。比如说使用了。使用了M1的方法。OK,那现在呢,我们分配一个变量adapter拿到,那adapter拿到以后,各位各位同学们看我A点M1就可以了,虽然我也可以调M2M3M4,但是我真正。我自己想去适配的呢,其实只只需要对M1进行一个进一个处理,所以说我运行一把。那运行完了过后,你看这边这边输出的就应该是使用了M1的方法。
12:00
回头再看这段代码,大家就应该看的比较明白了,看到没有,OK,怎么写的,你看他原先这边有好些个接口,比如说有,呃,这这有一个接口,这一个接口里面呢,有这些方法,看star end can repeat,你看这can end repeat star,另外这两个方法是来自于这个接口的,那这里面我有一个animator listener adapter呢,它是个抽象类,它将。这两个接口的所有方法都默认实现。啊,默认实现是不是啊,同学们是不是默认实现,那一默认实现完了过后呢,其实这个地方就已经实现这个接口适配器的一种模式,那到时在程序里面我们可能只对这一个什么呢。呃,就是我们只对这个类,就是同学们看到的这个类,就是animate listener adapter,这个类里面的哪个方法感兴趣呢?就是on。Animator大这个方法感兴趣,所以说你看我六的时候。
13:02
我只去重写我关心的方法就完事了。OK,同学们大致大致明白这个接口适配器什么意思了吧?回头再看它的一个解释,应该就听懂了,看这里啊。我们回头再来看。当不需要。不需要全部实现接口提供方法时,我们先设计一个抽象类实现接口,并为该接口的每个方法提供一个默认实现及空方法,理解了吧。那么该抽象类的子类,子类就是我们那个匿名,匿名内部类对应的那个实例啊,叫匿名内部类,那么抽象类的子类可以有选择的覆盖覆类的某些方法来实现需求,比如说M1,明白了吧,OK,所以说我们看通过举例,我相信同学们对这个呢理解的有。更深入了一点,更深入了一点,OK,同学们,那关于我们适配器模式的最后一种接口适配器模式就给同学们介绍到这里,只要大家记住这个图就可以了。
14:01
就是同学们画的这个图啊,其实并不难,对不对,并不难,这边我们可以去有选择的覆盖啊,就是我们这不有空放吗?我们要M1,我们就覆盖M1,我们要OPERATION1就覆盖OPERATION1,我们要去覆盖OPERATION2,就在AA类里面用它的一个匿名子类来覆盖它的,呃,第二个方法以此类推,好同学们关于接口适配器模式就给同学们介绍到这里。
我来说两句