00:00
模板方法模式中的钩子方法,我们来看一下。那模板方法模式的构筑方法是指的什么意思呢?在模板方法模式的分类里面,我们还可以定义这样一种方法,它默认呢,不干任何事情。此类可以视情况要不要覆盖它,这种方法称之为钩子。我们还是以上面这个豆浆制作这个案例来讲,比如说我们希望还要制作另外一种豆浆,叫纯豆浆。这个纯豆浆呢,它不需要添加任何的配料。你想这个时候就很麻烦了,前面呢,咱们是有这个添加配料方法的。那现在有一种豆浆不需要添加配料,你怎么去处理呢?那就很麻烦,比如说你可能说诶老师,那我写一个方法里面不不干任何事,那毕竟他是也是个方法呀,这样不合不合适,所以说他要求用钩子方法对前面的模板方法进行一个改进,那这个时候呢,我们可以这样干。那这个时候我就这样子啊,我也不去啰嗦了,我也不画图了,我们直接呢对原先代码进行一个改进就可以了,来看一个。
01:05
那怎怎么做哈。呃,我们找到。我们的模板,那我这儿写一个。写一个包。对吧,我们比如说把这个包叫做一个pro。升级improve。Improve p。那现在呢,我们怎么去升级呢?同学们,我现在把这几个方法对,我偷个懒,把它复制到我们这个improve包里面去。那为什么这地方他不让做?好,再来。再选一下,然后复复制过去。好的。那复制以后呢,我们我们这么来玩一把,比如说现在我们在这边做一个在他的。这这个objectsct so milk里面我们加一个钩子方法来看一下,这个钩子方法我正在写。就是钩子方法写错了,钩子方法这个方法干什么呢?就是决定,决定是否需要添加什么呢,添加配料。
02:10
诶根据你的需需求来写,那现在我们这样写,不返回一个不ing值,然后这边叫做custom。OK,看什么呢?Want,要不要?望要不要这个配料condems?好,默认情况下呢,我们返回一个处。大家看什么意思啊,就默认情况下我们是要加的,那这个时候呢,我们在这个模板里面,我们加一个这样的套路,如果custom。OK。如果这个值它返回帧,我们就去添加这个配料,好同学们看,这时我们对原先这个代码来讲呢,应该是不会对对他有任何影响的,我们可以看到仍然是跑起来了。是不是红豆豆浆我们是加红豆了的豆花生豆浆我们是加花生的,现在呢,我们新加一个子类。
03:04
这个子类呢,叫纯豆浆,来写一个类,朋友们写一个类。好,我们来写一个纯豆浆。这样一一种薪酬叠加。标,然后呢,SOA m。对不对。然后我们也让他去继承我们这个so milk。对。所有。Milk。豆浆好,现在呢?我们需要去干什么呢?同学们,我们做下实验。其中,其实同学们可以看到,我们现在要去实现,主要是要去重写一下这个爱的。Condis我们要去覆盖,那大家可以看到在这个so里面呢,其实还有一个方法,就这个抽象方法是不是,诶一个这个方法我们要去写,那这个地方你怎么去处理比较合理呢?大家想怎么去处理比较合理呢?你不写任何东西就行了,因为这个就是一个空实现。
04:07
空实现就行了。对不对,空实现就完了,但是有一个方法我们要去重写,就是哪一个方法呢?就是custom来这个地方,原先它是返回的一个醋,因为我是纯豆浆,我不加,所以说我把这个写成boss就完事了。看到没有,也就是说。我们如果通过这个纯豆浆去掉这个make方法的时候呢,因为我重新写了custom one cons,他反馈错,所以说那个配料就不会再去加了。那是不是这样子呢?来,我们给大家编写一下。叫做我们直接写代码制作纯豆浆。来看一下思路,制作纯纯豆浆明白。纯的。豆浆好,那既然是纯豆浆,显然我在这边会留一个纯豆浆的对象实例。
05:01
对不对,同样我们仍然是用抽象。类的名称来接收。那这个时候我们用存单去调M,你会发现哈,这个时候纯豆浆仍然我们对客户端来说仍然是make。仍然是贝壳,但是在调的时候你会发现它不再去加任何的配料了。走一个。我们看纯豆浆的制作流程。第一步,诶纯豆浆这个地方我们是调错了呀。哦,不好意思,下面没有改。跑起来。看一下。对不对,第一步选择好的新鲜豆浆,第二步就呃这个步骤,当然实际上我们这写写死了的啊,其实这个名称呢,你可以调的。就是你按照流程来的,就第一步过了,没有第二步操作,第二步操作为空,直接进入到我们第三步干什么呢?黄豆和豆浆开始浸泡需要三个小时,然后呢,豆浆黄豆和配料放到豆浆机去打就完事了。
06:01
明白,所以说这里面我们发现呢,它不需要加入任何的这个配料,所以说我们制作的是纯豆浆。这里面就用到了一个勾值方法,所以说我们再回顾一下勾值方法的作用是什么呢?勾值方法是第一个方法,它默认不做任何事情,可能会返回一个布尔值。那么子类是情况,要不要覆盖它?简称钩子。好的,那这就是我们这一个模板方法里面的钩子方法的一个使用,大家要注意还是一个比较不错的设计方法,对不对,它可以比较轻松的实现,就是哪一个方法在你的模板里面要不要调调用。需要调用或者不调用,你可以设计这个钩子方法去进行一个控制。好,关于构筑方法,我们就说到这里。
我来说两句