java 设计模式 责任链 filter

从前往后按照一定操作顺序进行 

申明一个过滤器接口,里面有一个“方法申明” 叫 规则过滤,返回处理后的结果

申明一些具体的操作类,全部实现过滤器接口,重写里头规则过滤的方法,返回规则处理后的结果

写法:

返回结果 m= new 具体实现类().规则过滤();


更多的操作类组成的规则过滤 集合 可以放到一个数组里,接着按照遍历操作数组,按照顺序操作即可

for(Filter f:filters){
r=f.doFilter(r);
}
return r;

形成就是规则过滤链


责任链的拼接方式

申明一个责任链的类。用ArrayList 来存储 对应链里的对象,一个拼接责任链的方法 ,遍历责任链按顺序操作的方法

在处理过程类里写法:

责任链的类 fc;

设置get set 方法

所有的处理过程全部丢给 fc来处理

return fc.遍历责任链按顺序操作的方法(xxx);


主方法里的写法:

FilterChain fc=new FilterChain();
fc.addFilter(new HTMLFilter())
.addFilter(new SensitiveFilter())
.addFilter(new FaceFilter());


这里注意一个小技巧,把FilterChain 类型里的addFilter 方法的返回值不要设置为void ,而要设置为 责任链的类 为返回值,方法体return this;

这样就可以直接链条式编程了,fc.xxxx().yyyy().zzzz()

然后把fc set 到 处理过程类的对象里去

mp.setFc(fc);


 更进一步,申明一个责任链的类让它实现 过滤器接口。 让责任链中加入责任链,可以

fc.addFilter(fc2);



让过滤器可以重用,既过滤传过去的数据也过滤传回的数据

申明一个过滤器接口,里面有一个“方法申明” 叫 规则过滤,参数为(请求,回应)返回值为空

申明一些具体的操作类,全部实现过滤器接口,重写里头规则过滤的方法,填充请求和回应的内容,返回空

责任链的类因为也实现过滤器接口,要改变参数,填充请求和回应的内容,返回空

具体操作类,重写方法



为了实现过去顺序处理,回来倒序处理 的方式,在filter里引入一个FilterChain 参数,知道这个Chain后 接着往后处理即可

filterChain

@Override
public void doFilter(Request request, Response response,FilterChain chain) {
if(index==filters.size()) return;
Filter f=filters.get(index);
index++;
f.doFilter(request, response, chain);

}

HTMLFilter

@Override
public void doFilter(Request request, Response response,FilterChain chain) {
request.RequestStr=request.RequestStr.replace('<','[').replace('>', ']');
chain.doFilter(request, response, chain);
response.ReponseStr+="----HTMLFilter()";
}

SensitiveFilter

@Override
public void doFilter(Request request, Response response,FilterChain chain) {
request.RequestStr.replace("被就业", "就业").replace("敏感", "");
chain.doFilter(request, response, chain);
response.ReponseStr+="----sensitiveFilter()";
}


其他的内容不变

可以通过给程序打断点的方式,进入程序栈里头看看调用和返回顺序(选择进入和继续运行  的调试选项)












































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值