00:00
看的,我们下面呢,再来看叫做影视转换丰富内库的功能,呃,这句话应该怎么理解呢?是用这句话应该这样念,大家可能更清楚,就是说用影视转换的功能丰富我们的内库啊,这样就更清晰了啊,就是我这简写的影视转换丰富内库的功能,什么意思呢?看首先看一个基本介绍,如果需要为一个类增加一个方法。就是我要给个类增加一个方法,那么我可以通过影视转换来实现及动态的增加功能。诶,同学们知道。在我们在我们这个,呃,编程里面呢,有一个特别重要的原则,就OCP原则,这个OCP原则翻译成英文就是啊,翻译过来就是和闭合原则,闭合原则。闭合原则呢,就是open close principle simple啊原则,那这句话什么意思呢?就是从这个地方啊体现出来,就说我们如果要给一个类增加一个功能,他希望什么呢?看这里在当前出去,如果想给一个MYQ类增加功能,其实非常简单,为什么呢?比如说我上面提的这个观点,我要给my secret增加一个DD的,你直接在。
01:16
这个类里面加一个方法不就完了吗?但是如果这样写就很低端,他他认为什么呢。他认为这样在在实际中,我们如果要增加一个新的功能,一般来讲会改变源代码。那么这个呢,并不推荐,而且它违背软件开发OCP原则,因为OCP原则一个核心观点是什么呢?就是修改代码被关闭,增动增加功能被开放啊,他是希望做到这这么一点,这个这个这个OCP原则,我们我们在这个设计模式里面还要讲。同学们,后面你们会看到我们会讲一个模式,这个模式能够非常轻松的增加这个功能啊,这个OCP也在这体现在这呢,也体现出来了,好,现在我们可以通过影视转换函数给类动态的增加功能,那怎么实现的呢?非常简单,看一个案例。
02:13
比如说我这里有一个,呃,MYCQ的一个类,里面只有一个一个insert的方法,这里面有个DB这个类,然后这里面有个delete方法,现在呢,我要做一件事情,做一件什么事情呢?我希望能够让这个MYSQL。这个类的实例使用到delete的方法,但是不能把这个delete直接拷贝过来。那么怎么实现的呢?请看代码,非常简单,就placeit写了一个函数,这个函数名随意写F1 f2 F三都行,然后这里面我写了一个MYCQ的一个行参,返回一个DB。再看六一个DD,同学们有应该有发现,我这里虽然传了一个MYSQL对象,但实际上我根本就没有用它,这个行参只有一个作用。
03:09
干什么呢?就是用来让编译去找到他。就是匹配到它只有这一个作用,好,那下面呢,我们来看一个代码,就是我六了一个MYSQL,我只要这么一写啊,大家看我这只要写个六个MYS,你会突然发现惊奇的发现MySQL delete就能用了。啊,很很有很有意思,待会儿我给你们看一下底层源码,好,同学们,因为这个代码也非常简单,我们来写第二个案例。好的,我们来写第二个案例,叫。It啊implicit class啊,就是影视影视增加这个功能的啊,影视的DEMO吧,因为后面还有个影视类,我给他区分一下。好,写到这里来,同学们请看代码,我做一个组主函数,好,然后呢,我把这个先写到这啊,写到这个代码可能有点哪个地方有个少是少了一个什么玩意,少了一个,呃,大括号好开写了啊开始了。
04:10
好,我们创建一个MYSQL,创建一个MYSQL对象,MYSQL对象很简单,又一个MYQL啊,六一个MYSQL啊,走点value,好MYSQL就写出来了,那这个时候这个MYSQ呢,大家可以看到我在这里调的时候呢,只能调insert,我要去调它的deletet是调不动的。哦,没有怎么办呢?好,同学们看,我在这里写一个隐式函数来丰富我们的内库啊,编写一个隐式。影视。影视函数。影视函数干什么呢?丰富丰富这个MYSQL对象的这个功能。好非常的简单一句话的事啊,写了首先关键字要写进去,因为如果这个关键字你不写,编译器是不会去做这个隐式转换的,然后呢,我写一个呃,F1,当然我就为了好好看呢,我就直接写个叫爱的delete。
05:13
啊丁,然后这边我要接收一个啊,接收一个参数,这个类型呢,你必须告诉我是MYSQL类型的。好,然后。啊,这边少了一个DF。好,然后呢,你给我返回一个DB类型。好等于,然后这边呢,就一句话的事,六个DB。完事了。那这个时候你会突然发现一件事情,MYSQL点击delete可以用了。好,我们来看看,首先看代码能不能跑起来啊呃,先看代码能不能跑,而且大家看是不是又出现了一个下划线,看到没有,只要以后你看到下划线,我告诉大家啊,一定知道他用了隐私转换。有时候你看源代码很多地方就是难在这个隐私转换的地方,好我们先跑一下,那么我一跑起来,功能代码看一下没有任何问题,那么我现在就要来分析一下,它到底怎么就实现了呢?主要是分析这句话。
06:12
哎,同学们还是老规矩,我问大家,当我们我问大家一个问题啊。我如果把这个影视函数拿到外面去,大家觉得。能不能OK?是不是一样可用?为为什么,因为你,哎我问大家一个问题了,就是我这个写写完了过后,是不是它仍然是object里面的一个方法,那我在这里面用是不是没毛病的,可以的,但是你要把这个东西你拿到别的类里面是用不了吧,老师我把这个你不是随便写吗?我把这个地方捡走。我剪到另外一个类里面去,那你想想能找到吗?对吧,比如说你你你写到这,比如说我写一个这个dog啊dog,然后我在这写,你看这个他能找到,他肯定就找不到了嘛,能理解吧,所以说我们这个这个影视这个这个函数呢,你不能乱写,你要让你要让他编性能够找得到它,也就说编辑从这个作用域上能够能够识别它就可以,那么更多的方法,更多的使用呢,很多程序员喜欢把这个影视的专门写一个文件,然后import进来。
07:20
就是我专门把一堆影视的这个影视的函数专门写到一个一一个文件里面去,写到一个类里面,然后import进来,也是一个很好的思路,后面我们再写这些,后面再写讲那个阿卡的时候呢,我们再做这个封装,好好同学们这样就OK了,我们看看底层是怎么跑的,其实猜也猜的出来是什么,大家看。如果我把这个implicit写到外面,这个函数名就是它了。就不会再出现Dollar的一个东西了,是吧?啊,这个大家能理解吧,就说这地方,如果我写到外面,它是怎么转换的呢?它其实就是这样干了一件事,追星。写到这儿来。
08:00
然后他干什么事情呢,把你这个MYSQL传进去。你传进去这个是不是就返回了一个DB,能理解吧,然后直接调用了delete。他其实底层就干了这样一件事情。啊,仅此而已。那如果说如如果说我把这个implicit放在我的主函数里面呢?那么这个函数名做了一点点变化,就是DOLLAR1。好,我们来运行一下,看看是不是这样子的啊,来同学们,我运行一下,给同学们看一下底层的代码。好,这个一过了就OK了,非常的简单,来打开我们这个地方,看看它是不是做了这样一个影视的转换。打开它啊,打开它啊,同学们可以看到在这里呢,我们有一个DEMO2,我直接追进去看一眼。哎,同学们可以看到的确如此,对吧,你看这个是我们的一个哦,I的delete到了一,然后在这里看这里,哎,你看爱的delete。
09:02
到一把MYSQ传进去,点d delete,因为你前面这一段已经是一个DB的一个对象实例了,说调它没毛病。调它没毛病,对是可以的,好这样呢,我们就相当于说影视的给他增加一个功能,好这就是我们隐什么,其实也是编译器帮我们做了工作啊,其实编译器做了工作。工作好,到时呢,这一个我们叫做影视转换,这个就说完了,那我问大家一个问题啊,我问大家一个问题,呃,如果说我这个,呃,如果说我这个DB里面除了d delete,我还有一个update,是不是一样也可以用啊。哎,对了,这点大家要清晰的知道啊,说我这个DB里面的update,其实我这里也可以用。因为我返回的是一个DB对象实意嘛,那我用它就是理所这理所当然的事情嘛,对吧,这个大家应该一下就明白,哦,原来是这么一个底层,就是如果我把这个东西写到这了,你还不能理解,就讲不过去了,因为这他其实底层就是搞了一个DB实例,然后搞了,但是从代码形式上好像我没动它,只是编译器帮我们做了工作了。
10:17
看编译器这个作用还是非常大的,好了,同学们,那关于这一个叫影视转换丰富内库的这个功能呢,我们就讲完了,就这么一点东西,来朋友们给大家板述一下。好,异常简单。异常的简单,来,这个是我们的标题二。标题二好啊,标题二影视转换丰富内库呢,我们这整了一个这样的快速入门案例,诶,它的作用就这样子啊,作用就是增加一个方法。好,来往这儿。来一个快速入门的案例,标题三代码我给大家写到这里啊。
11:01
代码如下,案例代码好,同学们,标题三写完了,把代码直接给同学们板书过来。底层我就不写了啊,底层那段代码我就不接了。好的,那我们截取一段视频,就叫影视转换,丰富内库功能。
我来说两句