博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
责任链模式
阅读量:6094 次
发布时间:2019-06-20

本文共 3216 字,大约阅读时间需要 10 分钟。

/** * 责任链模式:最形象的例子就是过滤器,一个字符串,经过一连串的过滤器,最后得到想要的字符串,例如,过滤HTMl标签,过滤敏感字符,过滤特殊字符 * 模式特点: 一个过滤器接口,多个实现类,其中一个实现类叫过滤器链,它里面有个集合存所有的过滤器,执行过滤时,就是从集合中拿出一个个过滤器来执行 * 相当于遍历,但跟遍历的表现形式不一样: * * * *///定义过滤器链public class FilterChain implements IFilter{    private List
list=new ArrayList<>();//存储过滤器 private int index;//过滤器集合的执行索引 //注册过滤器 public void addFilter(IFilter filter){ list.add(filter); } //过滤方法 @Override public void filter(Request req, Response resp, FilterChain chain) { //当执行完所有的过滤器后就停止 if(index>=list.size()){ return; } //取出其中一个过滤器 IFilter filter = list.get(index); index++;//索引指向下一个过滤器的索引 //执行过滤器的过滤方法,这里传一个this对象作为参数,是为了在filter过滤器中还能再次调用chain.filter方法 //这样的话,每次进来这个方法,index索引就可以指向下个过滤器,因此相当于遍历集合了 filter.filter(req,resp,this); }}public interface IFilter { void filter(Request req,Response resp,FilterChain chain);}//a标签过滤器public class AtagFilter implements IFilter { @Override public void filter(Request req, Response resp, FilterChain chain) { String reqParam = req.getReqParam(); reqParam=reqParam.replace("
",""); String replace = reqParam.replace("", ""); req.setReqParam(replace); resp.setResponseStr(replace); chain.filter(req,resp,chain); }}//敏感字符过滤器public class SensitiveFilter implements IFilter { @Override public void filter(Request req, Response resp, FilterChain chain) { String reqParam = req.getReqParam(); reqParam = reqParam.replace("脏话", ""); req.setReqParam(reqParam); resp.setResponseStr(reqParam); chain.filter(req,resp,chain); }}//特殊字符过滤器public class SpecialCharFilter implements IFilter { @Override public void filter(Request req, Response resp, FilterChain chain) { String reqParam = req.getReqParam(); reqParam=reqParam.replace("#",""); String replace = reqParam.replace("$", ""); req.setReqParam(replace); resp.setResponseStr(replace); chain.filter(req,resp,chain); }}//请求对象public class Request { //请求参数 private String reqParam; public String getReqParam() { return reqParam; } public void setReqParam(String reqParam) { this.reqParam = reqParam; }}//返回对象public class Response { private String responseStr; public String getResponseStr() { return responseStr; } public void setResponseStr(String responseStr) { this.responseStr = responseStr; }}public class Test { public static void main(String[] args) { Request request = new Request();//创建请求对象 request.setReqParam("$
www.baidu 脏话#"); Response response = new Response();//创建响应对象 FilterChain filterChain = new FilterChain();//创建责任链对象 filterChain.addFilter(new AtagFilter());//注册a标签过滤器 filterChain.addFilter(new SensitiveFilter());//注册敏感字符过滤器 filterChain.addFilter(new SpecialCharFilter());//注册特殊字符过滤器 filterChain.filter(request,response,filterChain);//调用过滤方法 //打印返回值,因为上面filter方法传入的参数是对象,引用类型,所以在过滤器中对该对象的改变会改变原对象 System.out.println(response.getResponseStr()); }}

 

转载于:https://www.cnblogs.com/yangxiaohui227/p/10936408.html

你可能感兴趣的文章
cmake总结
查看>>
搜索引擎-倒排索引基础知识
查看>>
baby用品
查看>>
Jquery解析Json格式数据
查看>>
数据加密插件
查看>>
一款很不错的html转xml工具-Html Agility Pack
查看>>
linux安装中文输入法
查看>>
怎样用Java编写一段代码引发内存泄露
查看>>
2012年终总结
查看>>
eclipse导出jar包
查看>>
windows系统下利用MySql命令行进入MySql数据库
查看>>
如何隐藏日历列表的重复和全天事件栏目-方法2
查看>>
Java NIO与IO的差别和比較
查看>>
HTTP/1.1 中 If-Modified-Since 和 If-Unmodified-Since 区别简记
查看>>
怎样炒掉你的创业合作伙伴?
查看>>
[计算机图形学] 基于C#窗口的Bresenham直线扫描算法、种子填充法、扫描线填充法模拟软件设计(一)...
查看>>
UNICODE编码表
查看>>
hadoop Mahout中相似度计算方法介绍(转)
查看>>
C语言嵌入式系统编程修炼之(三)内存操作
查看>>
IE和Firefox的Javascript兼容性总结
查看>>