Coin163

首页 > java 设计模式 责任链 filter

java 设计模式 责任链 filter

2018阿里云全部产品优惠券(升级也可以使用,强烈推荐!!!)
领取地址https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=gh9qh5ki&utm_source=gh9qh5ki

相关推荐:设计模式-责任链模式

1.定义 使多个对象都有机会处理请求, 从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连城一条链,并沿着这条链传递该请求,直到有对象处理它为止。 2.UML 3.代码 public class Request { private int mLevel; public Request(int leve

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

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

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

写法:

返回结果 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()";
}

相关推荐:23设计模式之责任链模式(COR)

返回目录 1 概述 COR属于行为型模式中的一种,使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。这一模式的想法是,给多个对象处理一个请求的机会,从而


其他的内容不变

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












































原文

从前往后按照一定操作顺序进行  申明一个过滤器接口,里面有一个“方法申明” 叫 规则过滤,返回处理后的结果 申明一些具体的操作类,全部实现过滤器接口,重写里头规则过滤的方法,返回规则处理

------分隔线----------------------------
阿里云优惠券
在线网页数据采集器