前言
职责链,通俗地讲就是把责任处理对象连城一条链,这样当一个处理对象不能及时处理的时候就会交给下一个处理对象直到被处理为止。就好比生活中,我们有事向学校请假,得找班主任签字同意,然后有些时候需要院里签字,甚至教务处,最后将假条交给同学,最后在给相应授课老师,可能这个例子还不太准确,但是总之经过一些列流程,最后才会处理。
当然,在程序中,最常见的就是过滤关键字了,首先模拟一下非web下的责任链
首先定义一个过滤接口
|
|
接下来就是各式各样的过滤字
敏感字过滤
|
|
过滤html标签
|
|
过滤链:将过滤器串成一个链,并保存过滤后的字
|
|
测试:
|
|
输出结果:
因为一个英雄而爱上了lol,他就是李青,虽然我是盲僧,但是我还是只坚信我的[我的信仰]英雄!!
Web下责任链
当然一般情况下,都是过滤web环境下的字符,大概思路跟非web下差不多
首先需要建立request和response对象,即接收和响应
|
|
然后是Filter接口
|
|
紧接着是filterchain类
|
|
然后就是具体的filter了(这里就是web中的真实拦截顺序了)
|
|
另一个filter
|
|
先附一张structs2原理图,来对比一下上述过滤过程
主要关注action invocation中部分
测试类:
|
|
结果:
因为一个英雄而爱上了lol,他就是李青,虽然我是盲僧,但是我还是只坚信我的[我的信仰]英雄!!
response–SesitiveFilterresponse–HTMLFilterresponse
最后归纳一下责任链设计模式的一般形式
分别为客户端、处理者和具体处理者