00:00
Java设计模式最后一个,也是我们23种设计模式里面的最后一个,就是职责链模式。那我们仍然是先看一个需求。这个需求呢,是关于OA系统采购审批这么一个需求。学校有个OA系统。要完成采购审批的一个需求,具体来说,这样子的采购员呢,要采购教学器材。如果说采购的金额小于等于5000块,我们教学主任就可以进行审批。如果说金额小于等于1万块钱,院长就可以审批。如果说金额小于等于。3万块钱,当然,呃,大于肯定就是小于小于等于3万大于。1万块钱这个这个条件就没有写了,明白吧,由副校长审批,如果金额超过了3万块钱呢,由校长审批,所以他们这个具体来说审批的级别呢,应该是这样子的,潜在大于等,比如X啊大于等于它,然后说小于等于五。
01:10
对。5000这是一个级别,然后呢,审批的金额大于5000块。大于5000块,小于对。小于等于多少呢?好,我们看一下小于等于。小于等于1万块。是由我们的院长审批,如果说他的金额。是大于了1万块。大于1万块,小于等于多少呢?小于等于了3万块钱。由我们的副校长审批。如果是大于三块钱。大大于3万块钱由谁呢?由校长审批,这是我们的一个具体需求,然后呢,要求我们编写程序。完成这一个审批项目。那我们最容易想到的一般是什么方式呢?一般是这样子的,同学们看。
02:04
就说我这里有个OA系统审批,然后这边我有一个类叫per request处理。这一个购买的请求。那这里面呢,我很简单,就是我让这个类去依赖或者说使用不同的这个请求者的请求,这个approve就是请求者或者是请请求一个审批项目的一个人,那么这里面在我这个process里面呢,我可以用分支来判断。也也就是说我在这一个里面呢,我可以加一个if。来判断,如果这个金额就跟前面那个条件一样,如果这个金额在某个条件里面,我怎么怎么处理as if。As e又在一个什么样的条件里面,我又找另外一一个级别的人去处理,如果是在另外一个级别,对吧,我又找另外一个能够处理这件事情的pro啊pro去进行处理,也就是说我在这里面呢,去使用到不同的审批者。
03:07
然后呢,根据对这个金额的判断,调用相应的审批人去处理这个审批。好,这就是传统方案。那么传统方案存在的问题,我们来做一个简单的分析。传统方式接收到一个采购请求后,根据采购的金额。经过嗯,根据采购的金额金额来调用对应的op pro及审批者来完成就行了,就是你的金额在。比如说在1万块钱,我找哪一个人来审批。对不对,好,那么传统的方式,呃,它的问题是什么呢?客户端这里会使用到分支判断,就是刚才我说的他会用if。或者是Switch来对不同的采购进行处理,那这样就存在了下面几个问题,第一个呢,如果各个级别的人员审批金额发生了变化。那么在客户端也需要变化,嗯,这句话什么意思呢?比如说原先我们定义的是。
04:05
呃,原先我们定义的是。是哪一个呢,比如说。比如说校长呢,原先是需要在3万块钱以上才有校长审批,那假如我们条件变了,比如说我们扩大了副校长的审批权限,由3万变成了4万,那这个校长呢,就提高到4万以上审批。那你这个条件一改变对不对,那就意味着我们的调用方,就是我们那个调用处理的这一方面呢,也要进行进行改动。进改动,好,这是刚才说的第一个问题,第二个问题呢,可以看到客户端必须明确的知道有多少个审批级别。对不对,因为你要用if语句嘛,你用if服钥匙判断了,你才知道有多少个呀,所以说他必须对审批级别和具体的情况要要有所了解,那也就是说。上面这个问题也就是说什么呢?如果这样处理的话,对一个采购请求进行处理和这个RO就是审批人就存在了。
05:10
强耦合关系,换言之,就是前面我们所说的这个。才处理请求的这么一个类,会对我们的各个oper请求人之间发生比较强的一种耦合关系,不利于代码的维护和扩展。所以说在这种情况下呢,我们提出解决方案就是职责链模式。引出我们职责链模式。好,那下面呢,我们就来看一看职责链模式到底是怎样一个概念。
我来说两句