00:00
同学们大家好,本小节当中我们为大家讲解的是一个mixing设计模式啊,当然最开始的时候要为大家介绍一个东西,就什么叫设计模式对不对?好了,右键新建一个,来,我们写一个普通文本文档吧,想一想来mix啊,XE啊,设计模式,然后点击确定啊,然后点击文本。首先给大家说一下什么叫设计模式好不好很多啥叫设计模式啊,设计模式这个东西呢,其实很简单,它只是一种思想而已啊,它叫设计,设计模式只是一种开发思想,开发思想,发开发思想啊,开发思想啊,它不是固定格式啊,不是啊,不是什么固定的格式。所以这个大家要了解啊,简单的说就是什么呀,前人的好不是前任啊,前人的好的思想,我们后人拿过来用啊,这就是所谓的设计模式,也就说白了,之前的程序员开发的时候发现某种什么呀,呃,设计某种程序,写成这种结构,或者写成某种特殊结构,会非常的方便管理维护,或者是操作,甚至是复用,那这种方式呢,久而久之沉淀下来,就形成了一种类似于固定格式,这种用法我们就叫设计模式,所以大家不要奇怪啊,这种东西设计模式啊,都是有多少种啊,是不是好设计模式啊,有很多很多种,多少种呢?基本上可以类似于无限种,为什么呢?因为任何人都可以写出种方法是不是?但是大家常用的设计模式其实也就十种20种左右啊,什么MVC模式啊,MTV模式啊,单利设单利设计模式啊,MMEC模式啊等等也就那么十几种。当然我们现在作为初学者,不需要把所。
01:48
或者设计模式都学会啊,因为设计模式是一本也是一种非常深入的一种什么呀学习,或者叫高阶的一种学习,毕竟它是前人的一些高级同学总结下来的一些大的思想,什么观察者模式啊,追查者模式啊,发布者模式啊,很多很多设计模式,如果你掌握了多门语言的时候呢,想更进一步提高自己的思想,开阔自己的眼界,那么大家可以去买一些相关设计模式的一些方法的书来给大家看一下啊,当然这个书里边的语言不一定啊,有些设计模式里边写的是Java语言,有些写的是PP语言,有些写的P,有些写的javascript,什么样语言的设计模式都有啊,当然也有一些通用的设计模式的一些东西,设计模式它不适用于某一种语言,也就说这不是说这个语言专用的,其实某一种设计模式拿出来给别人的语言来用都可以,比如说Python的模式,计模式是不是啊,拿给别人用行不行呢?行了,不用,Python里边我们经常用MTV设计模式,但其实可以给PP用啊,也可以给大号用啊,都是可以的,明白,所以设计模式它不绑定于语言。
02:48
它是一种思想而已啊,好了,当然我们现在之所以讲mix in设计模式,主要原因还在于什么呢?这不刚好讲多集成嘛,多集成里边可以用这个东西啊。好了,来,Mix in I mix in啊,设计模式。
03:02
设计模式好,那这个设计模式啥意思?Mix混合印进去,混合进去呗,是不是这个模式的主要特征,给大家说一点啊,或者说这个设计模式有什么优点啊,第一这个mii in啊,它这个设计模式可以在不对类不对类的内容。的修改前提下啊,前提下扩展类的功能。这是它的第一个优点啊,第二个什么呢?可以更加方便方便更加更加方便的什么呢?组装或者是组组装怪怪的啊叫组织吧,叫组织和维护啊,和我们维护不同的组件,这第二个第三个啊,可以可以根据。开发需要啊,任益调整调整功能,然后呢,第四个就是可以避免产生更多的呀,可接错了可以避免产生更多的类,写错了就更多的类,这是它的优点对不对,有没有缺点啊,有啊能没有缺点吗?是不是他的缺点看好了缺点。
04:25
缺点缺点是啥呀?这玩意儿受限啊,受限制啊,受什么限制呢?受继承关系限制啊,继承关系限制推荐推荐只有两层啊,就不像菱形那种三层以上的,两层的什么呢?两层的继承使用啊好,说这么多都是废话,我们来看一下真正的代码行不行?来我们现在假设自己是一个什么呢?卖水果的行不行?来右键新建一个P文件啊,我们干什么呢?Fi fiu,写上mix in1吧,是不是fixx in啊第一个文件假设我们自己是一个卖水果的,所以呢,需要一个水果类哦水果类那简单class f fruit it嘛,It行不行?Fruit,水果类pass也不需要写内容啊,这个跟那边东西没什么关系,然后呢,干什么事呢?那大家都知道这个水果把你的分割类吧,是不是?所以呢,我们把水果分成什么呢?分成这个南方水果和北方水果,是不是,那这里边我们写上一个南方水果类和一个北方。
05:26
水果类啊,南方水果类啊,哎,写错了,南方水果类class,咱叫它oth吧,这是南方上好向北吧,So south fruit发it啊,然后。Pass一下。这个类写的是没有问题,对不对,那当然啊,你拿到税果类是不是该继承水果类啊,所以在继承关系当中我这样写啊。来写上继承我们的水果类啊,水果类没有问题,然后接着那有南方水果类,是不是应有北方水果类啊,好,加一个北方水果类,OK,北方水果里咱叫它class是不是,然后呢,在这里边干什么事呢?写一个or th nurse it啊,It框二,它当然也是进入水果类了,写上去好来pass OK,然后呢,接下来那我们还有水果是不是真实的水果,比如什么香蕉啊,葡萄啊,橘子之类的是不是OK,我们来看一下,看什么事呢?比如说写一个苹果类吧,什么是先写上一个苹果类。
06:24
苹果苹果类,哎,Class Apple呗,Apple类那pass一下,那当然Apple是北方的水果对不对,所以我们在这里边让他继承北方水果类啊,自然也没什么问题喽,那是fruit OK,然后再加一个梨啊梨的类。啊,梨子类好梨,我们的class PA片好上括号,那它也是北方水果对不对,好介绍北方是吧,好pass一下,然后呢,我们还有什么呢?还有这个香蕉啊香蕉。香蕉啊香蕉这类的话,Class banana bananana啊,然后呢。
07:02
Pass一下,那香蕉是南方水果,北方种树这玩意儿是不是,所以我们在class里面,在这个类的继承里边,我们写上什么呢?写上南方水果类。好。来接着来看啊,我们再加一个橘子吧,行不行,橘子啊,或者叫就叫橘子吧,好橘,这个橘我还不会,这个橘子普通橘子我会啊,橘子好,橘子类class orange orange行不行,Orange。好,Orange是南方水果是不是?因为橘生南方则为橘,生于北方则为枳嘛,是不是,所以咱继承的是南方水果,好了,那在这里边我们写了一个什么呢类,而这几个类里边采用的是什么呢?叫做单继承关系的,继承的给大家画张出来,大家看一下它的继承关系行不行,我画图没法看啊,所以给大家画图看一下单继成。附件的附件的,好在这儿点开我们的画图工具画图板。好,打开了之后,我们在里边给它画出它的一个继承关系,行不行,左边来画啊,最上面我们画了一个水果。
08:03
这里边放了一个水果类,或者叫做fruit类啊,Fruit it fruit类写错了,Fruit fruit it fruit类,好,然后呢,为了让我们的水果有更加详细的划分呢,或者说是讲更加详细划分,我们在这下面加了一个南方水果与北方水果的划分,对不对?好,这是南方水果啊,我写汉字吧,不然写不开了啊,南方水果啊,水果。南方水果类,然后呢,北方水果类,北方水果类然后呢,OK,没问题,我们这里边确实也写了,而且继承关系也写的很明确,南方水果继承水果类,北方水果也继承水果类,对不对?好来接来看啊。然后呢,我们下面又写了四个,是不是写了什么四个呢,香蕉啊。苹果梨,橘子这几个是不是啊这四个。好,大家看啊,这下面写的第最后一个是苹果吧,啊苹果啊,我没有按照那个顺序选啊,我是按照它的分类来放的苹果类啊,这是一个梨子类,因为它俩都是北方的嘛。
09:10
哎,梨啊,然后还有香蕉和橘子,香蕉和橘子类,然后呢,他们的继承关系没有问题啊,刚刚是怎么写的,对不对,好,我们往上拉一下,哎,拉个线啊。啊,香蕉呢,它是继承这个白色的是什么什么东西啊好香蕉呢,我们继承的是南方水果,然后橘子继承的也是南方水果,然后呢,梨继承的是北方水果,苹果生的也是北方水果,但是现实生活中的分类可能比这个还要多,你看它的关系是啊,一个类,两个类,四个类,如果说我在南方水果里之南方水果和水果之间再加一个分类的,比如说。什么分类呢?就是能不能送礼啊,能不能当礼送去啊,能不能送礼,刚刚这两个是什么呀。
10:03
我把它划分到一起好不好来把这个之间的啊,这两个之间的是什么呢?是方向或者叫方位吧,行不行,这两个我们是按照方位方位再审问,写错了啊方位。在我们的水果类和真实水果之间加了一个什么划分啊,对不对,或者类别划分啊。那是真实水果,真实水果然后呢,我们的分类可能远比什么方位要多,比如说能不能送礼这个,那如果说我们把这个水果的分类再加一级,加一个能不能送礼来分的话,那么水果类划分出南方和北方,南北方再加上送礼,你是不是得划分出四个来。划分哪四个呢?这四个分别是南方。礼物,水果。然后呢,南方非礼物水果,南方非礼物水果非礼物水果,北方礼物水果,北方礼物水果北方非礼物水果能看懂吗?我写的这个应该是没有问题的啊,那与此同时大家看一下我们增加了几个类,我们只是单纯的增加了一个分类,但是实际工作过程当中,你增加了是四个真实的类,而且下面这些类改还得改继承方式,是不是不能再进南北方了,得继承南北方什么呀?礼物非礼物,好,我给大家写出来行不行,我真实给你操作一遍啊好,我们刚刚说了,那既然要加这么几个的话,那就写呗。
11:36
你要加一个南方礼物水果,好把这个注释去掉啊,怎么样,你要加一个南方礼物水果行,Class,南方south so礼物gift fruit,好,这是南方礼物水果,Pass一下,那南方礼物水果是不是应该继承南方水果类啊,没问题,好,来摘一下,还有南方非礼物水果好,南方非礼物水果咱就这样直接叫它。
12:04
Class写class south not gift怎么讲not啊?Gift not gift fruit就是不能当礼物的水果。然后它们块是不得继承南方水果类好没有问题,然后呢pass一下,然后呢,我们后面在这里边还有一个北方水果类来在里边啊,北方水果类class,然后我们的nor nurse nor nurse gift。然后呢,水果f fruit it,北方水果类pass一下,他在继承北它北方礼物水果是不是得继承北方水果啊,好,继承关系写上去。然后呢,粘贴一下,然后北方非礼物水果,然后呢,这里边你再看啊,Class nurse not gift,然后f ru it啊fruit it,这是北方非礼物水果,Pass一下你是不是也继承北方水果好继承好,而且你刚刚加里一个福类,导致增加了四个类,对不对,没有完呢,你的真实水果的继承是不是得改啊或的苹果应该属于什么,北方可以送礼,是平平安安嘛,是不是,所以北方他应该继承北方礼物水果啊,写错了,继承北方礼物水果。
13:20
看到了吗?然后呢,我们这个礼,这个生离死别不好听是不是,所以送送人礼物,没有送礼的你不能说,哎呀,你上医院也送了一筐礼给人家是不是,那巴不得人早早点再见是不是,那不不合适是不是,然后呢,比如说香蕉,香蕉是南方礼物还非礼物呢,香蕉南方非礼无十个,很多说香蕉不是经常送吗?是啊,但你看对什么人,一般情况下啊,你要是对一个这个叫什么来着,普通病人是没问题,但是你要是对一个精神病患者,尽量不要送香蕉啊,他听焦字儿会想到焦虑啊,叭,如说我这个精神病,我就是个精神病患者啊,我听见香蕉我就很紧张啊,就是焦虑的意思啊。然后呢,橘子这个东西一般都是什么比较简单的,是不是没有什么特别意义,所以送橘子是没有问题的,把这个写成南方礼物水果啊。
14:08
好,看到了没有,我刚刚只是为了增加一个能不能当礼物的分类,最终我在刚刚的操作里边添加了四个类,并且修改了后面所有真实水果分类,看见了吗?所以你的操作很多很多,说不多呀,好,那你想想我如果再加一个,就是吃的时候用不用扒皮呢?用不用去皮来吃啊,你看好了,我再加一个,用不用去皮来吃,去皮啊,要不要去皮来吃,那这个时候就热闹了,为什么呢?这四个里边再加一个去皮变成几个八个啊,南方礼物扒皮吃,南方礼物不扒皮吃北方呃,南方非礼物扒皮吃,南方非礼物不扒皮吃,北方礼物扒皮吃,北方礼物不扒皮吃,北方非礼物扒皮吃,北方非礼物剥皮吃,是不是增加了八个类别,如果你再增加一个16,再增加一个分类二三十二,而且我们还只是增加了一种二的分类,就是就是左左边和右边两个选择的,如果你加了分类是四种分类的话,是不是比如说什么颜色,红橙黄磷氢原子,那这个分类是几何数的增长,所以说如果采用这种方式,什么方式呢?单继承的方式啊,来处理这个水果分类的问题,你会发现每增加一个分类,它成几何倍数增呢?而且下面每一个水果的操作都得修改。所以负。
15:32
非常的繁琐,为了解决这个问题,分类问题,我们就提出了一个混合模式,什么模式呢?因为我们也发现一个问题,什么问题啊,这个方位呀,送礼是不是包不包包皮啊,好像之间没什么关系,也是他们没有必要非得写成单继承对不对,那这个时候我们可以采用多继承的方式来实现这个操作来,请注意啊,我们在里边新建一个第二个文件mix in2。在第二个文件里边呢,我们把第一个文件当中最开始的水果类,把它拿一份过来,只拿一个水果类,然后把后边这四个水果,就是苹果,香蕉这四个类拿起来。
16:11
那么拿进来之后,我们要在里边加什么,是不是要加分类啦,什么南方北方啊,什么礼物非礼物啊,扒皮剥瓜皮啊,是不是好看好了,现在一共五个类,我干什么事呢啊,目前所有类啊,现在只有五个类嘛,所有类这水果类,所有真实的水果类,它是不是把这个这个搜索取消掉啊,所有这个真实的水果是不是应该记成水果类就可以了。也就是说现在没什么分类啊,就统一一个水果类好,我现在干什么事呢?想增加一个方位了,我想增加一个方位。想增加一个方位的分类,方位不对啊。方位。的分类,那怎么加呢?看好了,我不再像以前那样啊,写个什么像上面这样啊,南方水果继承水果,然后再下面这是水果继承,我这样写。
17:02
一个类叫做南方类,Class so south pass一下。然后一个类叫做北方类。北方类写错了,北方类,然后class叫做nurse,然后看好了我在这里边,那你是不是要给水果分类啊,对不对,好,没问题啊,我既然说要分类好水果的功能你该有吧,分类的功能是不是也有?行,苹果是北方的,我让你使用多继承,继承北方水果好,梨也是北方的,我让你多继承,继承北方社宝,然后你是南方的吧,啊,行,香蕉和橘子我让你继承南方的类好。就以这一步而言啊,没有关系,还是几个,一个加三一个加二个加四个,还是七个,我们原来画图是不是也是七个,是不是啊,只不过现在的结构变了,以前是有继承关系的,现在是这样的,我有一个水果。啊,有一个南方,有一个北方。对不对,我一个南方一个北方,我这样写上啊,我们最开始这是一个水果类。
18:05
单继承的在左边啊,我们这一次应多继承水果类,然后我写了一个南方类和北方类。你说我把它分类啊,南方类。南方类和北方类。北方类,北方写错了,北方类啊,我就放这儿了,然后呢,下面这四个真实的水果,他们肯定要什么呀,要继承南方北方这些分类对不对,我采用的方式不再是继承就是啊,南方水果继承水果而采用什么呀,你要什么功能,我给你塞什么功能进去,哎,你香蕉你不是南方的吗?行,我给你送,我把南方人你继承了行不行?然后呢,你是水果吧,行,我让你继承水果好,你看一下香蕉是不是既具备了水果的功能,也就是南北方的功能,好,没问题,那梨是北方的,行,咱换一个颜色啊,一个颜色容易蒙啊。再给你换一个颜色。
19:01
那离北方的没问题,我就让你继承北方类啊。然后你也是水果吧,行,水果类我也让你继承。看见了吗?就是这种方式,很多人这是多继承吗?是,你看看你的子类是不是继承多个类啊,是啊,然后呢,平果也是一样的道理啊,你是北方水果吗?是咱就继承北方。然后呢,你是什么水果吗?是,咱就接着水果吧。而且这还不是主要的好处,因为这样的看来的话,左边右边是不是都是七个类呀,但是你看好了,我们左边增加一个什么呀,礼物非礼物是不是要增加几个,是不是要增加四个类啊,南方礼物南方非有礼物,北方礼物北方付非礼物对不对?而像右侧这种多继承的方式,你不需要增加那么多,你只需要增加两个类就可以了啊,你只要增加两个类,哪两个类呢?就是礼物类和非礼物类。啊,礼物呢?然后再加一个嘞,叫分礼物类啊,化不开了。我又来了行不行?
20:00
好,再加一个分力物类。来再加一个非礼物啊,非礼物。非礼勿视是不是非礼物?非礼物啊物。无。非礼物的物怎没有了?哎,礼物礼物啊,非礼物,然后这个时候你想给某个水果分类,是不是只需要做一件事情啊,你香蕉不是说非礼物吗?那你就直接继承非礼物就可以了。也就是采用的是多技能方式,你要啥直接往里什么加副类就可以了,你发现了没有,我只增加了两个类就实现了,我们要的功能就是给它划分分类嘛,是不是再加一个分类啊,苹果可以当礼物,我就把你继成苹果,看见了吗?然后我们这个什么梨不能当礼物,是不是,那就让它继承非礼物。然后呢,如果你再想加一个八皮,不扒皮,你向右侧这种方式是不是只需要加俩类,而向左侧的话,你得加八个类才能实现,也就是说我们单机绳如果使用这种方式的话,会几何倍增长,而你使用这种多继成的模式,它实际上要几个分类就加几个,根本不会成几何方式增长,是不是,这就是多继承啊,多继承实现的操作,也就是我们刚刚说的mi X SE嘛,Mix SE模式啊,Mix模式简单的说,你要啥直接往里塞,要啥直接往里塞,这就是传输的酶C模式,其实并不难啊,而且这里边其实也告诉了大家什么呀,什么时候用多集成比较好,简单的说就是当你的父类和子类只有两层的情况下,使用多继成,并且这个父类之间没有关系啊,使用多继成实际上是非常快捷方便的,所以多继层不是说不让大家用啊,特殊情况下,而符合他的使用场景的话,你用多机成是没有问题的,只有特殊什么,有些时候你像什么呀,什么父子关系呀,父子爷爷关系,这个用多集成可能不太合适啊。
21:52
啊,但是你像这种什么呀,他们互相之间没有关系的,你多进层反而显得更加方便,而且很容护方便维护,对make要啥加啥要啥加啥混合进来是不就可以了,好了,那这样一来的话,关于make的设计模式的应用啊,也就是多集成的一个用,就为大家介绍完了,好了,感谢大家收看,我们下一小节再见啊。
我来说两句