00:00
我们使用依赖倒转这个原则呢,对方案一进行一个优化和处理。打开我们的ELIS,我们在这里做一个改进,好吧,做一个改进还是老规矩,我们在这里写一个新的包包,对,提个包呢,我们叫做improve。升级嘛。那省点事,我们直接把这段代码拷贝过去,在这里改就行了,对不对,拷贝到这边来,我们看怎么修改。我们看怎么修改。首先。我我我我把这个先拿一下啊,同学们这块我不要了,对吧,我不要了,因为这这是方12了嘛,来方。嗯,刚才我们讲过,根据前面这个分析呢,我们首先要做一个接口。对不对,先定义一个接口。来跟上我的思路。定义。定义一个接口。对,那这个接口呢,Interface I receiver。
01:07
Receiver。这个接口好,那这个接口里面呢,我们要写一个方法试菌,因为这个方法里面就是你把这个get in for提上去。你明白意思吧,就是这个方法呢,我们把它做成一个接口里面的抽象方法。那具体实现,我们让这个email去place,去实现这个接口里面的这个方法就OK了,没有做太多的改动是吧?那当然我在接收的时候,我肯定接收的不再是email了,因为我希望干什么呢?我希望是跟我们的接口发生一个依赖。所以在这写一个I receiver这边呢,也不能叫。他了,直接叫receiver就行,CV,那receiver是谁?你给我传进来的一个是什么就什么,这就行完了,那同学们看我们这个时候客户端不需要做任何的改变,要看客户端不无需改变。
02:11
无需改变,那我们运行一下,同学们看,我们运行起来,我们发现呢,仍然跟前面一样,是不是也收到电子邮件的信息。而这种设计的好处是因为我们此时此刻是跟我们的接口发生了一个依赖那。只要你这个接口没有变化,你下面这一个子类或者叫细节发生变化,没有影响大家看,我在这里再增加一种新的接收方式。增加什么呢?比如说我们增加微信。对,我们接接收这个微信,那class微信好,我就这样写哈,就这样写个微信,那我仍然是implements I receive这个接口。
03:00
是不是这样的道理,然后呢,我在这里去实现这个方法,这边我们写上微信消息。微信的消息,比如说叫hello OK好吧。那你看我这写完了过后。Person不需要改变,这边你怎么做呢?当然你这你你这要接收什么消息,你肯定还是要传这个对象实例过去的,对吧,这个你肯定要要做的VC什么,聊一个微信就可以了。看我我的改动很少的,因为这边我是依赖接口的,对吧,这里我们是。是对什么呢?A。是对这个接口接口的一个一个依赖。那这样子,因为我以来的是一个较为抽象的一个接口,所以说它稳定性就是比较好的,那同学们看我这里运行你看代码很轻松对吧,我们接收到微信信息,Hello OK,好,同学们,这个就是我们对。
04:05
我们使用了依赖倒转这个原则。对我们的。Person接受消息的一个改进。一个改进,那下面呢,我们再来说依赖关系,它传递的三种方式有哪些,我简单的聊两句。我简单聊两句,那么在我们进行这个依赖倒转的时候呢,往往会进行这个传递,就依赖关系的传递,它有三种方式,一种呢就是基于接口的传递,一种是基于构造方法的传递,还有一种就是通过C这个方法来进行传递的。那这个地方呢,我就不去写代码了,我这里有一个资料,我们拿来给同学们看就OK,来,我把这个文件拷贝这边来,我们来搂。Night no year。好的,我把这个包改一下,改成我们。相应的这个报名同学们看第一种方式哈,我先把这里注销一下,不着急。
05:06
我先把这笔注销一下。注销了。好,我们先看第一种方式,各位朋友先看第一种方式看这里。第一种方式呢?第一种方式,这个是基于接口传递来实现我们的依赖的。依赖的好,这快快没电了啊,坚持一下。啊,它是通过这个接口来实现这个依赖的,怎么做的呢?大家看这里有一个开关接口叫open and close里边呢有个抽象方法。他接收的是什么呢,接口。好,这里有个ITV,它是一个接口,这个接口里面有一个play方法。好,我们这有一个类。这个类它实现了这个接口,实现这个接口就意味着要去实现这个open。
06:00
这个open方法拿到以后呢,我们在这个open方法里面去调这个play方法就可以了,也就是说这时我们是通过你在这个地方传一个接口进来,你看这是接收接口。Open是接受一个接口,是不是就通过这个接口来实现这个以来的传递啊。那至于这个这个方法怎么写,那根据你的情况来写,比如说你这个TV是遥控的,遥控的电视电视,那你是一种打开方式,如果你是手动的TV是手动打开。你还有其他方式,你自己去写就完了,是不是很轻松啊?那这段代码我就不去测试了啊,比较简单,我就不去测试,这是我们通过接口来实现,这个以来的传递就在这体现出来的,那第二种方式呢,我们接着再来看,我把这个先注销一把,我们看第二种方式。还是以这个为案例。前面一样,大家看它仍然是一个接口open,但是大家发现没有,这里面没有。
07:06
接收接口了,他怎么做的呢?这个地方也有个接口叫play。我这里有一个属性。或者叫成员吧,这个成员呢是个TV,这个TV的类型是it,也也就是他是个接口,那么这个接口它是怎么传进去的呢?就说他怎么把这个接口给给传进去的呢,大家看它这里是通过了我们的构造器。来传递的。你看,我在去实例化一个open and close的对象实例时,我需要传入一个实现了ITV这个接口的一个对象。是不是这是把TV传给了里面这个TV这个接口类型,实际上这就是通过构造器来实现了以来的传递。
08:01
这是第二种方式,这种方式同学们在开发中应该也是见过的,对不对,它也是通过呃,通过这个构造器来传递的,还有一种方法。这种方法呢,用的也是比较普遍的,是通过什么呢?C方法来实现的,我们来看一下。大家看这有个接口,这个接口里面有个open,有个sad TV,这时。这个赛TV里面会接受一个接,实现了这个接口的对象实例下面我就不去说了,我自己看这是怎么做的。大家看,当我们去实例化一个open and close的实例时,我们要去用到这个TV,需要调用晒TV这个方法才能玩。看到没有赛TV也就是说三种方式是这样子,这个通过晒的方式,把这一个实现接ITV的接口的对象实例传递给了open and close这个类的这个成员,三种方式大家看懂了没有。
09:03
好这样子吧,如果大家这块不明白,我我把这三个方法呢,给大家用一下,你们就明白了。给他用一下你们就明白了,来我们写一下,比如说我在这里写一个类。比如这个电视机是我们的第一种电视type TV。好吧,我实例化。呃,我去实现这个TV的。这个方法。好的,我。加一个。好这个比如说我们这个叫长虹吧,好长虹。长虹这个TV。输出一句话叫什么呢?打开。就是长虹电视。长虹电视机。电视机打开了。打开。对不对,你看这个,那么我们怎么传进去的呢?非常的简单,我们首先呢,要六一个长虹电视机肯定还是要有的嘛,对不对,有了。
10:07
长虹,那这个时候有了长虹过后呢,我们再来创建一个open and close。这个类。要有这个对象啊,这个对象。好的,然后在这里呢,我们实例化一个这样的对象,然后调用。他的一个方法,这个方法就是刚才同学们看到的open TV,把什么传进去,把长虹放进去就可以了,因为长虹这个电视机它实现了ITV接口,所以它能够接收我们运行一下。你看这个能跑起来吧,就是长虹电视机打开,这是第一种方式,第二种方式是通过构造器来实现的,我们也来写一把。好,我把这个呢先注销好吧。先注销,呃,这个还是打开,因为长虹这个地方我还是需要用一下把第二种方式再给大家做一个小测试来吧。
11:08
仍然是我们的长虹电视机,他实验的一个TV。他实是个TV。好,我这电有点不足了啊,我得补一下电。那现在呢,我我在这个长虹这边,长虹这个电视机,它实现了ITV所说电视机打开,那我们看这时它是通过构造方法来实现这个依赖传递的,那你看我们这个地方应该怎么用呢?好,我把这个先注销好吧,先注销来玩一把。来玩一把,那这时我们仍然又一个open,按照这个close,这时直接把橙红放进去。就可以了。是吧?对,放进去过后呢,我们可以调它的方法。他这边肯定有个方法,这个方法就是刚才我们学的open。
12:02
这个时候这个open没有直接接收一个接口了,为什么?因为我在这个构造器的时候就已经把这一个依赖,就是它依依赖的这个接口。对应的那个对应的那个对象已经传进去了,说这是第二种方式,就是通过什么呢构造器。进呃,实现啊,进行进行依赖的传递。是不是同学们,我们运行一下一样可以跑起来?一样可以跑起来没有问题吧,好我们再看第三种,第三种这个方式呢,它是这样子的。啊,他这样子,我们把这个也拿下来好吧。把这个剪了,我们把第二种方式先注销,把第三种方式打开。把第三种方式打开。仍然需要。一个实现了ITV这个接口的电视。那同学们看到这个时候呢,它的步骤是这样子的,先把open close创建起来,然后通过set方法。
13:05
把我们实现呢,ITV这个接口的对象实例传递进去,是不是也是实现呢,我们以来的传递,那这个时候怎么实现呢?来各位朋友,我们继续来写第三个方法。通过什么呢?写一个方法啊通过。通过CI。方法进行依赖传递。怎么做?先溜一个open。And close。这个没有问题,然后呢,我们这个时候用open点调play,大家想这个时候会不会有问题。这个地方肯定是有问题的,如果你这样直接就用,你看你的构造器是没有传进去这个依赖的,你open也没有通过接口传进去,你这样一执行,它会报一个什么呢?我们看这地方一定会报一个问,报一个错误,叫空指针,哪里报了错了。
14:04
显然你在调用这个方法的时候,TV是个空的。TV是个空的,因此你要这样做的话呢,你首先得晒TV把长虹。实现了ITV的这个对象是长虹先放进去,然后我们再去调我们的play方法、open方法就可以。这时仍然可以运行。对不对。长虹电视机打开了。同学们,那这就是我们讲解的依赖关系的三种方式,这三种方式呢,在我们开发中实际上是经常使用到的,我也相信同学们在开发中都用到,只是老师呢,把这个以来的三种方式再给大家点出来。就别人问到说依赖关系有几种传递方式,OK、接口、构造器和塞。同学们,那关于依赖倒转的原则的这一部分内容呢?先给大家聊到这里。
我来说两句