00:01
访问这种模式需要注意的和一些细节,我们来看一看,那么访问这模式呢?我们看一下它的优点,优点就是访问这模式符合单一制作原则,让程序具有优秀的扩展性和灵活性,这点大家应该看到了。除了可以扩展这个不同的测评,我们是不是还可以扩展不同的人呢?你我们上面是一个woman。还有一个man,是不是可能还有小孩,如果这个man man里面呢,我们分成青年、中年和老年。是不还可以分呢,诶这个就他就感觉扩展性很好。扩展性很好。第二个访问这种模式呢,一般可以对功能进行统一,做标报表啊,UI啊,拦截器啊,过滤器,适用于数据结构相对稳定的系统。就数据结构相对稳定,比如我们前面那个集合对吧,一般不会变化加减。缺点是什么呢?具体的元素对访问者要公布细节,大家有没有发现这句话是怎么理解,就说你你这个地方具体元素是不是就是man和woman?
01:06
大家有没有发现那man和woman,你们有没有发现在这里他会去调用action里面的get man result,注意,这个地方其实就是我们所说的你具体元素对要访问,要对访问者公布这个细节。也就是说,访问者关注了其他类的细节,因为你访问者不知道别人相当于无法访问。你访问不了。对吧,那你看往往这里面看,你看这个action get get main result。Get result,那你那你到这里面去的时候,你看。跟Mar瑞,你这里面这个访问者是不是我们可以认为是success这个访问者里面,他还有有些对这个细节的一些细节的理解。好,这是我们说到这一点,那么这是迪米特法则不建议的,所以这样造成的具体元素变更比较困难。
02:03
这个大家理解一下就行了。第二个呢,他还对这个依赖倒转原则呢,有一定的影响,因为我们访问者依赖的是一个具体的元素,而不是抽象,抽象元素大家有没有发现。对吧,就说我们这个访问者是谁呢?是action。我们找到action,他在这地方是依赖的谁呀,Man?Woman,而不是我们这个person,大家有没有发现?而不是一个person。对吧,所以说你看下面我们这这个面。在里面写的面面,在里面写的时候,其实它是依赖的是哦,我们这个地方。访问者啊。就这个地方你看。Action,它这边写的man和woman,说明他直接依赖的是什么呢?是一个具体的。具体的就是我们这写的具体什么呀,具体的元素,而不抽象元素。因此什么时候选用这个访问者呢模式来做呢?如果这个系统有一个比较稳定的数据结构。
03:04
又有经常变化的功能需求,那么访问者模式就比较首先是要求它的数据结构是比较稳定的。数据结构比较稳定,就大致呢,它这个结构是不会变化。而有时候又会有一些变化的功能,比如说我们又多了一个测评的一种方式,比如待定或者是什么其他的。这样呢,我们就比较适合使用访问者,那现在呢,我们把访问者的内容给大家简单的梳理一下,看我们是怎么讲的,好理解一下,打开我们的笔记,我们捋一捋这个思路。首先我们插入一个分页符,这就叫访问者模式。OK,那访问者模式我们式怎么讲的呢?首先我们还是提出了一个测评系统需求是这样子的,同学们。好,那这个需求呢,很简单,就是说给歌手打分,或者给歌手做测评。
04:05
对,给歌手做测评。那这边我们说到有这么两点对吧,这有个示意图,我们把这个示意图拿过来。帮助我们对他的一个理解。好,放到这儿好吧,诶,呃,放到上边吧,放到上边。那么传统的方案我们提出来过呢?我们分析了它存在的一些问题。是不是它存在了一些问题?哪些问题呢?就是扩展性不是很好。对,扩展性不是很好,于是就引出了我们访问者模式,那引出访问者模式以后呢,我们就对访问者模式做了基本的介绍,大概说了一下访问中模式它的概念是什么。我们。这儿说一下访问者的。它的一个基本概念。这我就不再去啰嗦了,好吧。
05:02
仿这模式理解起来确实要相对困难一点,大家有没有发现比前面咱们讲的设计模式要稍微麻烦一点,然后呢,我们又讲了仿这模式的它的一个原理,内图,还有它的角色的分析。好,我们整理到这里。那这边呢,我们对他进行了一个角色的说明,我们。通过一个分析呢,发现有visitor,有concrete visitor,有object structure,有element,还有concrete element。这边这个类图呢,我们也把它拿过来,是这个类图。帮助大家理解对不对?好,这是一个类图。好,那么这个类图说完了以后呢,我们紧接着继续来讲解的是访问者的一个实例,就是用访问者设计模式来解决歌手评分问题,是不是?好的,我们把它也拿过来。放到我们的笔记中去。OK。
06:00
那具体来说这个要求呢,我们这是写的比较清晰的。那我们来看一下我们是怎么完成的,首先呢,我们画出了对应的类图,这个类图就是这single。好,这个内存大家一看就比较清晰了。就是说本身设计模式它是比较麻烦的,但是我们画一个图呢,相对来说减小了我们学习的一个压力。好,这个就看的比较清晰,那代码呢也比较多,所以说我还是老规矩,给他压一个包就可以了。把包压到我们的笔记中去。就是visitor。来解决visit模式,解决我们这个案例,那下面我们要接着讲了什么呢?OK。说在这个地方呢,我们有个双分派这个概念,我也捋到这里了,好吧。其实上面那个代码已经把双方派说了。双分派的说明小字是。好,总结它,它的一个双分派。
07:03
双分派问题。好的,下面呢,我就不再一个念了,这主要是说,如果我们再听听添加一个wait状态,考察man和woman的反应,或者是测评呢,比较容易。对吧,不需要改动其他类的任何代码,直接拿来就可以用了,确实还是比较方便的。那紧接着呢,我们又对访问这个模式它的优点和它的缺点做了一个简简单的说明。放到这里。那么我们首先说的是优点。对,先把优点说完了,过后呢,我们说一下他的缺点,对吧。优缺点做了分析,给他标一个号。这边是这边缺点呢,我们也标一个号。所以说嗯,一个设计模式一定会有它的优点和缺点,那么根据你的具体来选择,最后我们总结一句话,如果一个系统有比较稳定的数据结构。又有经常变化的功能需求,那么可以考虑使用访问者模式。
08:01
前提不要忘了,数据结构比较稳定,就不会在这个结构上增加很多或者减少很多。好,访问这个模式我们就给大家讲解到这里。
我来说两句