设计模式之责任链模式(Chain of Responsibility)是Web项目中最经常用到的一个设计模式,比如是Apache Tomcat 的对Encoding的 处理,Struts2 的拦截器, jsp servlet 的Filter 等等,都是基于责任链模式设计的。
下面直接来模拟WEB发送一个请求Request经过两个过滤链HTMLFilter过滤标签、SensitiveFilter过滤敏感词汇,经过过滤之后返回一个Response对象
实例代码:
public interface Filter { public void doFilter(Request req, Response rsp, FilterChain chain); } public class HTMLFilter implements Filter { @Override public void doFilter(Request req, Response rsp, FilterChain f) { req.request = req.request.replace("<html>", "[html]") + "---HTMLFilter()"; f.doFilter(req, rsp, f); rsp.response += "---HTMLFilter()"; } } public class SensitiveFilter implements Filter { @Override public void doFilter(Request req, Response rsp, FilterChain f) { req.request = req.request.replace("很黄很暴力", "很xxx很xxx") + "---SensitiveFilter()"; f.doFilter(req, rsp, f); rsp.response += "---SensitiveFilter()"; } } public class FilterChain implements Filter { private List<Filter> list = new ArrayList<Filter>(); private int index; @Override public void doFilter(Request req, Response rsp, FilterChain chain) { if (index == list.size()) { return; } Filter f = list.get(index); index++; f.doFilter(req, rsp, chain); } public FilterChain addFilter(Filter f) { list.add(f); return this; } } public class Request { String request = ""; public String getRequest() { return request; } public void setRequest(String request) { this.request = request; } } public class Response { String response = ""; public String getResponse() { return response; } public void setResponse(String response) { this.response = response; } } public class Main { public static void main(String[] args) { String msg = "<html>很黄很暴力,天天开心"; Request request = new Request(); request.setRequest(msg); Response response = new Response(); // FilterChain ch = new FilterChain(); // ch.addFilter(new HTMLFilter()).addFilter(new SensitiveFilter()); FilterChain ch = new FilterChain(); ch.addFilter(new HTMLFilter()); FilterChain ch2 = new FilterChain(); ch2.addFilter(new SensitiveFilter()); ch.addFilter(ch2);// 过滤链上加过滤链 ch.doFilter(request, response, ch); System.out.println(request.getRequest()); System.out.println(response.getResponse()); } }
相关推荐
Java设计模式学习笔记
总结了java开发中的21种设计模式,详解和例子,带书签的pdf格式,方便阅读!
Java 版设计模式学习笔记-java-design-patterns
学习Java设计模式的笔记,标注了其中重要的要点,如果有需要的小伙伴,自行下载哦
图解java设计模式_学习笔记_java开发解压密码为twj123
云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...
zookeeper云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-...
该资料介绍Java各类开发模式,包含以下教程:《深入浅出设计模式(中文版)》《Java单例模式》《Java设计模式-图解-附代码》《JAVA设计模式之单例模式(完整版)》《Java学习笔记(必看经典)》《Java总复习》《单例模式》...
java设计模式的学习笔记,其中包含各种模式的代码实现
本课程是使用Java来讲解设计模式,考虑到设计模式比较抽象,授课采用 图解+框架源码分析的方式 1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML...
该pdf是本人系统学习尚学堂推出的300Java大型设计模式部分后自己整理的学习笔记,希望对大家有帮助!!!
Java的常见集中设计模式学习笔记
这是从网上收集而来的java学习笔记和设计模式文章,内容很经典,很值得一看。