资源描述:
《设计模式总结-责任链模式》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、注:文档内容基本上来自于网上,并加上自己的理解而成。有的觉得网友总结得非常好,就完全照搬下来,供学习之用。然而,有的摘抄并没有加上原链接和出处,请谅解。FilterChain例子(本例子模拟回路式的一个链式处理,要求输入按1,2,3这样的处理,而输出则再次需要以3,2,1的方式处理):publicinterface IFilter {publicvoiddoFilter(Requestrequest,Responseresponse,FilterChainchain);}publicclass HTMLFilter
2、 implementsIFilter{@OverridepublicvoiddoFilter(Requestrequest,Responseresponse,FilterChainchain){StringrequestStr=request.getResquest().replaceAll("<","[").replaceAll(">","]")+"---HTMLFilter";request.setResquest(requestStr);chain.doFilter(request,response);Str
3、ingresponseStr=response.getResponse().replaceAll("\[","<").replaceAll("\]",">")+"----HTMLFilter";response.setResponse(responseStr);}}publicclass SensitiveFilter implementsIFilter{@OverridepublicvoiddoFilter(Requestrequest,Responseresponse,FilterChainchain){/
4、/TODOAuto-generatedmethodstubrequest.setResquest(request.getResquest().replaceAll("sex","six")+"---SensitiveFilter");chain.doFilter(request,response);response.setResponse(response.getResponse().replaceAll("six","seexxx"+"---SensitiveFilter"));}}publicclass Fil
5、terChain {publicListfilterChain=newArrayList();publicintcount=0;publicvoidaddFilter(IFilterfilter){filterChain.add(filter);}publicvoiddoFilter(Requestrequest,Responseresponse){if(count>=filterChain.size())return;filterChain.get(count++).doFil
6、ter(request,response,this);}}测试代码:publicstaticvoidmain(Stringargs[]){Stringstr="
,.Thisisasexfilm!";Stringstr2="[Haa]Thisisasixfilm!";Requestrequest=newRequest();request.setResquest(str);Responseresponse=newResponse();response.setResponse(str2);FilterCh
7、ainchain=newFilterChain();chain.addFilter(newHTMLFilter());chain.addFilter(newSensitiveFilter());chain.doFilter(request,response);System.out.println("Requeststr:"+request.getResquest());System.out.println("Responsestr:"+response.getResponse());}输出:Requeststr:[
8、H1],[H2].Thisisasixfilm!---HTMLFilter---SensitiveFilterResponsestr:Thisisaseexxx---SensitiveFilterfilm!----HTMLFilter注:链式处理有时候也叫做拦截器处理,其原理差不多。注意上面代码中如何实现对response以处理request刚好相