龙空技术网

设计模式-责任链模式

信解行证 1212

前言:

而今姐妹们对“责任链模式实现”大致比较注意,看官们都需要剖析一些“责任链模式实现”的相关内容。那么小编也在网摘上网罗了一些关于“责任链模式实现””的相关资讯,希望兄弟们能喜欢,大家快快来了解一下吧!

责任链模式里面的很多对象对其下家的引用而形成一条连锁,请求在这个链条上传递,直到被处理完毕,而客户端并不知道链条上哪个链接点处理了这个事件。开发 Web 项目的时候,过滤器就是这样工作的,过滤器互相嵌套,一个接着一个处理请求。这个好处就是在客户端不在意的情况下动态处理连接点以及分配任务。

按照惯例,先上 UML 类图

Handler :抽象处理角色,定义一个处理请求的接口,可以设定返回下家的引用;

ConcreteHandler:具体处理角色,接收到请求的具体处理者,可以选择处理也可以不处理,把请求传递下一个连接点。

看下具体的代码:

先把抽象处理者写出来,他是一个抽象类或者接口,这里使用抽象类,每个处理者给一个名字 name 属性

再把具体的处理者实现出来

在该具体方法的 handle 里面,处理自个当前需要做的事件,然后寻找后续处理者,把到最后完成。

看下客户端如何处理

在责任链模式当中,对处理者而言,一旦一个请求只有一个处理者处理了,称之为纯的责任链模式,然并卵,现实没有这么纯的责任链;那么不纯的就是一个请求被0个或多个处理者处理了,这个情况很常见。责任链使得客户端请求与接收端处理减低耦合度,使得多个处理者都可以处理这个请求。这个链可以是一棵树,也可以是链表,也可以是个环。但是每个处理者只可以传递任务给下一个处理者,或者自己处理掉,不可能同时传递多个。

标签: #责任链模式实现