00:02
职责链模式的基本介绍,我们来瞅一瞅,职责链模式呢,它对应的英文是change of,呃,Responsibility pattern,然后呢,他又叫责任链模式,所以说大家看这个英文单词是责任的意思啊,就是我们说responsibility,那么他为请求注意听他为请求创建一个接收者。对象的链怎么个意思呢?大家可以看到,假如说我们这有一个类叫purchase request,就是购买请求,那么他会把这个购买请求发给谁呢?发给一个处理者pro就是过,就叫做审批者,而这个审批者里面大家有看到他有一个属性,这个属性里面这个包,它就说这个rover里面呢,它又包含包含另外一个。审批人或者叫处理人。那如果说这个请求就是他发过来请求,我能处理我就自己处理,如果我不能处理呢,我就把这个请求交给我这里面包含的这一个处理人去继续去处理,那这个approval里面呢,它又包含一个另包含另外一个处理人。
01:15
OK,这个处理人呢?他能够处理他就处理,如果他不能处理呢,他也可以交给下一个人,以此类推。所以说同学们看到这就形成了一个链,这就是为什么我们管它叫做职责链模式的由来。OK,所以说我们可以看到这种模式呢,他对请求的发送者和接收者进行了一个解耦,这个是请求的发送者,这边是请求的接收者,OK职责链模式,通常每个接收者朱婷这句话,每个接收者也叫处理者,都包含对另外一个接收者的引用。OK,如果一个对象不能处理该请求,那么他会把相同的这个请求转给下一个接触者,以此类推,就是同学们看到这面,比如说他这个家伙,他要是能处理,他就处理了,他不能处理呢,他就交给下一个,他如果不能处理,再交给下一个。
02:10
那有同学就问了,说老师如果说所有都不能处理呢?OK,那么最后它就会提示无法处理。对不对,好,那么从这里我们可以看出来,这种设计模式是属于行为模式的。处理的是一种请求,是一种行为。好,那么我们来还是老规矩,给大家画一下职责链模式的类图。然后呢,对他进行角色的分析和职责的说明,打开我们的这个eclipse,我们仍然新建一个包。好,新建一个包,我们简写一下。叫瑞。Response。BT是这样子吧,职责练还有写个Che n,叫做responsibility称。
03:02
名字有点长哈,然后呢,我们新建一个类图来,各位同学我们看看它是一个怎样的关系,首先呢,我们知道他首先会有一个处理者,就是或者叫接收者都可以哈,Handle。Her。这这个呢,我们认为就是。呃,就是这个请求的接收者,请求的接收者或者叫处理者,那他这里面呢,必然会有一个核心的方法什么呢?就是处理这个请求的。处理请求呢?我们可以取个名字叫process request。对,Process request,那么它是一个抽象类,它下面呢,就会有很多具体的这个处理者,或者或者叫接受者,叫concrete。什么呢,Handler。没问题吧,比如说A各位,那么他呢,会去怎么样?继承同样的道理,有一个当然可能会有多个了,就说请求的接收者呢,可能会有多个。
04:05
OK,比如说这是一个B,我就画两个同学们。同样,他也需要去继承我们handler。那有一个最重要的问题,就是这个handler里面呢,它自己还包含一个handler。当然它包含就意味着下面它的子类也就包含,也就是说它这里面必须还要包含一个什么呢?另外一个,另外一个处理者或者叫接收者,因此它的类型呢,是这样写的来,比如说我们叫做。叫做SUC。Su CSS successor。叫处理者哈,类型呢,我们取个名字叫handler。好,那也也就是说这个他自己包含一个,那这个图应该怎么画呢?就是自身聚合了一个自身这样一个类型的对象,那我们就这样画了。好,这样子大家一看也是一目而了然,一目而了然,那大家想一想哈,就是说既然它的户内包含一个另外一个handler,那么当他不能处理的时候,就说他这下面不是有这个请求吗。
05:15
诶,你看他在下面也有这样的方法,是不是他在下面也有这样的方法,对不对,同学们。那显然他就会把他在这个地方,嗯,他会,就如果他就是我们这个a concrete handler a,他如果不能处理,他就会去调自己从handlener父内这边继承下来的这个handler。去。调用下一个去处理。OK,因为你这个con concrete handle b呢也是一个handle,所以这就形成了一个链状。那还有一个东西呢,就是我们的请求对,比如说我们这有个请求类。Request,那么这个请求,这请求呢,他是怎么样呢?他实际上是要他去使用到他的,就是这个handler会去使用到这个请求,或者他要接收到一个请求,因此这边还应该有个线叫依赖。
06:07
我会依赖他,对那客户端怎么办呢?同学们可以看到客户端。OK,那客户端呢,它是去创建一个request,然后呢,再把这个request放到一个handler下面去就可以了,当然从哪里开始去请求,根据你的业务逻辑来处理就可以了。好同学们,这个就是我们的职责链模式。它的一个类图,那我对他进行一个简单的说明。对他们之间的职责做一个简单说明,来打开幻灯片,我们整理几句话说明一下。首先同学们看到,诶,把这个图拿过来吧。刚才我们画的这个图呢,拿过来对照这个图来进行说明。把这放过来哈。呃,放到这个地方来。托缩小一点。都缩小一点。
07:00
好,同学们看,这边职责链模式叫嵌of responsibility,那么它使多个对象都有机会进行处理,因为下面你这个A如果处理不了,就交给B好的,从而避免请求发送者和接受之间耦合关系。他其实就是在这判断,如果你能请求我就处理,不处理我就调下一个。这样将这个处理的对象形成一个链,并沿着这条链传递该请求,直到有一个对象进行处理为止。处理位置好,那现在呢,我们对内图的角色进行一个说明,首先我们说handler。呃,有些地方可能他不叫handler,可能有些地方直接叫什么呢?Approve也是可以的哈,就这个名角色叫handle,但是在写代码的时候,他有可能是是一个别的类名,这是可能的,我们写一下这这是什么呢?抽象的,抽象的什么呢?抽象的处理者。OK,处理者,它定义了。他定义了什么呢?OK,它定义了一个处理处理请求的接口或者要方法。
08:07
啊,同时呢,它包含还有还有另外另外一个handler对象。OK,很重要啊。Hand OK。我把这个放小一点。来个幺四就可以了。这是第一个,第二个我们再来看下一个,就是同学们看到concrete。特。Handler。Handler a或者是B哈B,他们是什么呢?他们是具体的,是具体的处理者,处理者。处理者。那他干什么呢,它处理。啊,他是处理他所负责的请求,要处理他自己,他自己负责的请求,注意他是处理他负责的请求,不是说处理所有的请求。
09:03
OK,那这样子呢,他还可以访问,可以访问什么呢?可以访问。那个他后他的后继者。他的。他的后继,后继者及后下一个处理者及及及下一个处理者。OK,那么如果说如果这个请求,如果可以处理当前请求,当前请求则自己处理,则自己处理,否则就干什么呢,就。就将该请求交给啊,交给下一个就是自己的后继者,后继者。后继者去处理。去处理,从而从而形成,从而形成一个职责链。职责职责,诶这个职。
10:02
则。职责列就这样来的,那么同学们还可以看到在这有个request,那么这个request呢,它其实还有很多属性,OK,它含有。我这没画,还有。还有很多属性表示一个请求。好,各位同学,那关于我们职责链模式的原理类图呢,就说到这儿,相信大大部分同学应该明白什么意思了,下面呢,我们就用职责链模式来解决采购批审那个审批的这么一个需求。
我来说两句