标签:
使用场景:
现在有如下字符 :) English < > ,现在想把其转换为 ^V^ 英文 [],并且根据要求对 :) English < >这个三类分别转换
解决办法:
(1)if else进行处理
(2)定义一个Filter接口,然后在定义三个实现Filter的类,根据具体的需求定义一个FilterChain。类图如下:
//注意:addFilter(Filter)返回值是 FilterChain,这是为了方便后面的链式编程
场景:如果实现Filter接口的多个类要组合成一个整体使用。
解决办法:将这几个类组合成为一个FilterChian,同时FilterChain继承Filter接口
具体代码:
//Filter接口 public interface Filter { String doFilter(String str); } //实现Filter接口的类 public class EnglishFilter implements Filter { public String doFilter(String str) { String r = str.replace("English", "英文"); return r; } } public class FaceFilter implements Filter { public String doFilter(String str) { return str.replace(":)", "^V^"); } } public class HTMLFilter implements Filter { public String doFilter(String str) { String r = str.replace(‘<‘, ‘[‘) .replace(‘>‘, ‘]‘); return r; } } //FilterChain(对FilterChain中的Filter以此进行处理) public class FilterChain implements Filter { List<Filter> filters = new ArrayList<Filter>(); public FilterChain addFilter(Filter f) { this.filters.add(f); return this; } public String doFilter(String str) { String r = str; for(Filter f: filters) { r = f.doFilter(r); } return r; } } //处理流程的分装,只需要传入处理的数据,和调用的FilterChain public class MsgProcessor { //省略setter,getter方法 private String msg; FilterChain fc; public String process() { return fc.doFilter(msg); } } //测试方法 public static void main(String[] args) { //需要处理的数据 String msg = ":) English < >"; //定义初始化处理的方法 MsgProcessor mp = new MsgProcessor(); //传入数据 mp.setMsg(msg); //定义初始化FilterChain FilterChain fc = new FilterChain(); //这里便是addFilter(Filter)返回值是 FilterChain好处 fc.addFilter(new HTMLFilter()) .addFilter(new EnglishFilter()); FilterChain fc2 = new FilterChain(); fc2.addFilter(new FaceFilter()); //将这几个实现Filter接口的类组合成为一个FilterChian,添加到另一个FilterChain中 fc.addFilter(fc2); //传入FilterChain mp.setFc(fc); String result = mp.process(); System.out.println(result); }
上面只是一个简单的Filter,对于web中request和response都需要拦截的拦截器该如何编写呢?
注意区别:上面的是一条直链
web中的链条还要折回来,并且response处理的顺序和request的顺序相反。
解决办法:doFilter(request,response,filterChain),多加一个filterChain参数
标签:
原文地址:http://my.oschina.net/u/2361475/blog/506444