00:00
对,依赖倒转原则呢,我们来做一个小结,包括它的注意事项和细节,我们聊一个话题。依赖倒转原则,我们要注意的地方有这么三点。低层模块呢,尽量都要都要有抽象类和接口。就是说A类,如果它是一个子类,尽量它上面都应它的,它的上一级最好是有抽象类或者是接口。或者两者都有稳定性就会更好,千万不要有这种方式啊,就说你有一个类,这个类孤零零的放在这里。除非迫不得已。OK,那第二个变量的声明类型尽量是抽象类或者接口。你比如说刚才我们我们的这个TV。我们这个TV其实就是一个接口,是不是这样呢?我们的变量引用和实际对象之间就存在一个缓冲层,利于程序的扩展和优化。这句话其实不是很好理解,它是这样一个意思,同学们听我说,就说假如我们有一个对象OB节。
01:10
那么他如果是直接指向了这个对象的实例。那这样子就说我们这个对象呢,是直接引用到它实际的内存地址,它直接就指向了这个空间,中间没有这个缓冲层。那没有这个缓冲层呢,将来如果说我们要对它指向的这个类进行功能的扩展,几乎是不可能的。那假如我们有这样一个设计方案。怎一个设计方案呢?比如说欧杰。它本身是指向了一个抽象,比如说OB节它这样子的啊,比如说我们我们有个A类。这个A类呢,它继承了一个B类,这个B类假如说是一个抽象类。假如说这个B类是个抽象类啊,假如。就是A,它继承了BB,又是一个抽象类。
02:03
那我们这个OB结呢,假如是这样解说的,比如说B。大家看清楚了,Obj。等于六。溜了一个A,这个是可以的,对吧,我把一个子类产生的一个实例交给父类的一个引用,这个是可以的,那这样子的话呢,有什么好处呢?好处就在于我们这个OB节。它其实从这个引用类型来讲,它是跟B关联起来的。对不对,那如果我们这个A类将来要去它下面这个A类,他要去扩展功能的话呢,我们可以不去直接修改这个A类,我只需要在B类去加一个方法,A类自然就会拥有这个功功能。大家理解的意思吧,就是说相当于让OB节它的引用,它实际的引用,它的引用类型跟我们这个实际的对象之间有一个缓冲层。
03:02
它是这样一种含义。那这样呢,我们就程序的扩展性和优化呢,会有会有一个缓冲,就好像打个比方,我我不知道这个例子合不合适哈,就好像你。你,你干什么呢?你跟你老婆吵架了?你跟你老婆吵架了,吵得很厉害。你跟你老婆吵架了,吵得很厉害,两个人。一见面也不说话,无法沟通。你如果直接去找你老婆。你说道歉也好,还是说怎么跟他沟通,他不理你?是不是这这两个就很尴尬了。但如果你现在去找了什么呢?诶,你先去找你的丈母娘去了。你跟你丈母娘说,哎,我跟这个这个谁谁谁有这个关,就是跟老婆之间有什么有什么冲突,有什么没有,嗯,沟通不到位的地方,你先让这个你的丈母娘去跟你的老婆沟通,诶这样子是不是就相当于中间有个缓冲,什么事情就比较好解决,其实我们编程也有这样类似的情况。
04:06
如果我们。任何一个这个变量的引用类型,直接就硬生生的指向我们这个实际的这个类型,那将来我们功能的扩展其实是没有办法做的。因为你要动,马上就直接动A,而且你只能动A。对吧,比如说我要去优化也好,我要去缓冲也好,我没有办法了。我没办法。甚至假设我们这个A类里面有个方法,比如说呃,我不知道这样说大家理不理解,比如说这有个A类,听我说啊,这个A类,A类里面有一个方法叫做C。试方法。C方法好,那么这个C方法呢,B类也有一个方法。BA,如果继承了B,大家想一想,是不是我可以在B类里面对这个你的A类的方法进行一个组合,或者进行一个优化的处理,对不对,就是类似于这种感觉,比如我,我在这个B类里面有个叫做hello。
05:05
我在这个哈里面的话,可以去用一个C方法。那我就一旦用的话,我其实是可以对你这个子类的这个方法进行一个缓冲,或者进行一个优化处理的,就这个一个含义,好吧,进行这样一个含义,就是说中间有一个缓冲,第三点呢,我们在进这个继承的时候,要遵循理事替换原则,至于理事替换原则是什么,我们后面马上就会讲到。好的同学们,那关于依赖的这个注意细节和呃,细节的问题呢,我们先聊到这里,下面我们把这一块讲的内容呢,做一个板书,做一个小小的总结,我们来看一下。依赖替换原则,我们讲了哪些内容?来聊一下这个话题。往下走。我要走。搂一搂往下走好,诶这边代码还比较多,往下走。好的,到这就可以了。好,那我们说的这一个依赖倒转的原则,首先我们先做了基本的介绍,是这样子的吧。
06:08
做了基本介绍。那么。我们要理解这个依赖倒转。他要明白的这五点核心思想就是。它是面向对象编程的,这一点大家要有一个认识,第二点呢。就是我们的高层模块。就是这这句话我觉得说的比较到位,就是抽象不应该依赖细节,细节应该依赖抽象。这样我们的稳定性就会很好。啊,还有一点呢,我们接口和抽象类呢,主要是定的规范。怕,主要是定规范。但是这里面不要尽量不要设计有具体的操作,因为你一旦有具体操作,那这个。那这个就违反了我们这个依赖的,尽量在接口和抽象类里面不要有具体的操作,把展现细节的任务交给他的时限内。
07:04
就可以了,你比如说刚才我们写的open play,你交给你的纸类去做就完事了。你就定个规范。好的,这是它的基本介绍,那下面呢,我们。讲了两个案例啊,讲了一个案例对吧,讲了一个案例,但是这个案例呢,我们是这样来实现的。我们先用的是方案一,先用了一个方案,就是最普通的方案,我们来实现的这个方案呢。就是这写的,这里面呢,我们,诶不是这啊,我们是在这写的,在这里面我们发现呢,我们是直接跟一个具体的类进行这个依赖的,这样子扩展性就非常的不好。是吧,因为我们也分析了,假如我们有新的接收方式来了,你你的客户端也好,你的这一个person也好,都需要改变,改动是比较大的,不够。
08:00
扩展性不够好。说第一种方案呢,我们就把它抛弃了。第一种方案我们就抛弃了,紧接着呢,我们使用了第二个方案,第二个方案呢,我们其实这里面就使用到了依赖。啊,以来倒转。依赖倒转,那依赖倒转我们是怎么做的呢?OK?方法思路很清晰,就是定一个接口,然后我们person呢,跟这个接口进行一个依赖,我定了个接口,让我们这个person跟接口进行一个依赖,这样稳定性就会好很多。当然这里面也有人喜欢把它写成抽象类,也是OK的啊,也是OK的。好,我把这个放这里来。这是我们这个应用实例,紧接着我们给大家介绍了依赖传递的这么三种方式,还有印象吧,哪三种方式要答得上来?哪三种方式呢?我们捋一下这个思路。我们捋一下这个思路。好三就行了,第一个呢是接口传递。
09:03
就是通过接口传递来实现这个依赖,第二种呢,是根据我们的构造方法来进行传递,第三种呢,是根据我们的C方法进行传递,最后源码我就放到这里了。哦,代码。代码演示对不对,代码演示啊,具体代码。就是老师在这写的,我就偷一个懒哈,把它直接放过来就可以了。大家呢,看这个笔记就可以把我们所有的内容一览无余,就就把所有东西我都整合到一个文档里面去,大家看起来和复习起来都比较的方便。最后我们还讲了一下依赖倒转原则需要注意的一个细节。哦,我这里总结了有三点,还有印象吧。哪三点,我们来看一下。OK。好,就是我们这讲的这三点。
10:00
就是这句话呢,第一层模块尽量都有抽象类和接口啊,那么变量声明的类型尽量是接口类啊,抽象类或者是接口。这样,我们的变量引用和实际对象之间存在一个缓冲层。那么有了这个缓冲层呢,我们就相当于多了一个沟通,或者是多多了一个就是让我们去加业务逻辑,或者是进行代码优化的一个可能。如果你直接就让我们的变量引用跟实际对象直接关联起来,中间没有东西,这个就很难处理,很难处理,最后一点呢,还有一个理事替换原则,一会儿我们马上就会讲。好,同学们,那关于我们依赖倒转就先给同学们介绍到这里。
我来说两句