苦行僧DH

博客园 首页 新随笔 联系 订阅 管理

1、责任链模式

1.1、先抛出问题

现在我们有一个业务要求如下:

- 判断此请求是否合法,不合法则拦截
- 判断此请求是否为接受请求,不是则丢弃
- 判断此请求用户是否登录,未登录则先登录
- 判断此请求用户是否授权此请求,未授权则异常返回
- 扒拉扒拉扒拉还有一大堆...................

此时我们过滤拦截代码会很繁杂,而且对于判断顺序也是繁杂,如果出现不同请求不同判断逻辑,那又得加if,然后当后面出现新需求,那又得扒拉扒拉的堆积代码。这种情况是不好的,我们只要抽出时间细想这些代码,就应该知道,我们应该将这种业务规范起来,使其井井有序,而不是胡乱堆积代码(代码堆积起来的坏处就不说,理不清是其次,出错了找问题很头大)。

那么这个时候责任链模式就派上了用场,这个模式很适合处理这种场景。

1.2、对抛出问题的解决

我们先不说责任链模式是啥,我们先对上面的问题处理一下,看图:

现在看到的图就是我们抛出的问题的情况,我们用户请求来后,需要做这一大堆的业务逻辑,如果用if判断的话,那当不同种类请求进行不同逻辑判断的话,就会造成繁杂的问题,这里我们将每个业务逻辑单独抽取到一个类中,作为一个业务逻辑处理单元。再看图:

我们请求来后,先通过业务逻辑执行器,再由业务逻辑执行器去生成业务逻辑执行链,业务逻辑执行链由多个业务逻辑处理单元组成,他们就跟链表一样,按照我们执行的顺序连接下去。如下图:

这个时候我们可以得出结论,当用户请求来时,我们Execution根据请求类型决定业务逻辑处理单元有哪些,顺序是什么样的,然后在去执行第一个业务逻辑处理单元,然后就会像链条一样处理下去,如果中途有失败的,那么就直接返回了。当然这里的handler方法的返回值可以自定义,不一定要boolean,而且处理逻辑单元的参数,业务逻辑执行器的方法都可以自定义,只要保证业务逻辑处理单元是链条一样,然后业务逻辑执行器可以生成一条业务逻辑处理链,那么就可以了。

这种设计模式对于处理大量业务逻辑的场景很适用,本随笔也只是讲述这么一个方法,具体实现可自行评估。

附网上搜寻的示例代码:

https://files.cnblogs.com/files/daihang2366/chain.rar

posted on 2021-03-09 18:19  苦行僧DH  阅读(106)  评论(0编辑  收藏  举报