00:02
看一下第四一个上面我们提到一个双分派,所以双分派指的是什么意思,就是说不管内怎么变化,我们都能找到期望的方法运行。双分派意味着。得到执行的操作取决于请求的种类和两个接收者类型。那么我们举个例子,比如说假设我们要添加一个状态类,叫做位置。就待定。等待。那么我们考察man和woman的这两个反应,比如他们对他的一个测评,那么使用双方半这个时候只需要增加action个子类即可在客户端调用,而不需要改动任何其他的代码,这是他优越之处。那同学们,如果我们在这个类图里面画的话呢,我们就在这里加一个类就可以了,一句话的事位置。位置。那这个地方wait呢,我们让他去实现这个,然后再把这个方法,把里面的方法根据你的需求。
01:01
把它怎么样实现了就可以。那这个地方一加进去过呢,Man和woman他们也可以出这个待定的这种评价了,明白。那我们看是不是就这么简单呢?确实就这么简单,来走一段代码,我先把它保存一下。好,我写个位置,大家注意听位置,有时候呢,画龙点睛的就是那么一两笔,所以你可能听了一阵,诶,你发现没什么用处,突然。有一个改动的时候,突然让你就明白它它的一个好处了,Action。同样我们在这里呢,加一段代码,诶说明这边我们得到男的的对他的一个评价,比如男的对他的一个评价,这个嗯,这个比如说男的。男人干什么呢?给的给的评价。评价是待定。这个歌手待定。就是该歌手是该歌手,该歌手。待定,OK。
02:01
那下面呢,我们认为女的给这个歌手评评价呢,也是待定,因为我这边。就是待定的一个牌子对不对?好同学们,你们有没有发现,当我这样一写完了过后,诶,你会发现我们代码不需要做任何改动,我们就可以让这个人不管是男的还是女的,就可以给他一个待定的一个评价了。是在哪里改呢?其实啊,同学们看到我们只需要在这改一点点就行了,因为我这里加了一个男的,一个女的,我没写名字,当然有人说是,那这个男的和女的有名字吗?我没有写,你们可以在里面再加吗?比如说呃,男的是张三还是李四,李四还是王五吗?你们可以把这个名字写进去,我这没写而已。好,同学们看在端,我们只需要这么做一把就可以了。大家看到这里。走一个啊,你看这个代码就显得非常简单了,就是。比如说。给的是待定的结果。给的。是待定。
03:01
待定的一个测评,大家看看是不是样就可以成功了呢?来,我们六一个位。我们留一个位置。大家看到如果我这wait,我让object,因为你这里面已经有两个男的了,呃,有有一个男的有个女的啊,然后呢,我让他去display。OK,我把什么放进去呢?Wait。也就是说,我认为。这两个人给的都是待定的这个测评,然后在wait传进去过后呢,然后继续访问的,访问这个模式吗?好,我们来看一下是不是这样一个结果走运行值,诶同学们可以看到看。男的给的评价是歌手代替,女的给的评价也是歌手代替。那如果在这个代码上,你在做一些相应的调整,比如说这个集合呢,可以有多个人,多个人,不同的人还有不同的名字,区分一下也是可以的。还可以,在这如果已经测评过了,你就不要再测评了。因为我这呢,主要是把这个模式讲清楚,所以你们看到好像诶怎么这两个人一会给的是成功,一会给的是失败,一会给的是待定呢,因为我没有让他,我我可以让他做多多次测评啊,多次这个评价。
04:09
对吧,那你如果说一个人只能做一次,那你在代码里面做一个判断就行了,比如他已经评价过了,那就不要再评价了,加一个标志就就可以搞定。那这个我就没去写了,明白我的意思吧,你不能说听课啊,说听课你你你说老师必须把每个细节都讲到,那这个课就没法听了,你也没我也没法讲,你也没法听,所以大家想象老师主要是讲的哪个地方呢?讲的它的核心就是说他的核心点就是你这有一个visitor,我可以把这个visitor放到person里面去,Person放进去过了再在这里面反向去访问它。OK。访问者模式好,同学们,所以说这边双分派,你回来再把这个流程再看一下,那看看他是怎么做的,我们再留溜一圈啊,可以看到它代码是这样子。嗯,首先我们把男的和女的这个人加到了我们这个结构体里面,这个相信同学们都看见了touch嘛。
05:07
加进去了,加进去以后我们以这个成功为例,我先display display怎么走的呢,大家看。他呢,去便利他这里面装的人,这个人呢,可以接受一个action。啊,大家看到这个action就是一个相当于是个访问者谁呀,那根据你的情况,比如说你在这填的是success,那么这个地方同学们可以看到。比如在这个地方呢,诶我我们到哪去了,是在这,他就是一个success这样一个这样一个一个对象实例,这个对象实例进到这里面,他会怎么去做呢?往里面追。看到没有,它会掉这个抽象,但是这个地方准确的讲应该是我们应该去看哪里了呀。对吧,我们应该是看这个person的一个事,那这个person到底是什么,你装的是什么就什么,比如说这里面装的是一个woman,那就到woman里面去执行了。
06:00
Woman。Woman什么呀,这里到woman woman里面去,它会except,在这里面,他把这个except反向调用except了,传进来,又用去访访问什么呢?哎,这个get woman再把自己传进去。所以看起来是有人绕,所以说大家有没有发现我在这画的这个线是。一个联,这个这个叫什么?联系叫做关联。就是action里面有person person里面有。Action。看懂没有?好,就这点哈,大家认真去体会,好同学们,那关于这这地方我们用到的所谓的提到的一个双分派,大家要去领会一下,领会它的一个好处,好同学们关于双分派,还有这个访问者模式,去解决我们这个评分歌手评分的案例,我们就聊到这里。
我来说两句