Java-马士兵设计模式学习笔记-责任链模式-模拟处理Reques Response
一、目标
1.用Filter模拟处理Request、Response
2.思路细节技巧:
(1)Filter的doFilter方法改为doFilter(Request,Resopnse,FilterChain),有FilterChain引用,为利用FilterChain调用下一个Filter做准备
(2)FilterChain继承Filter,这样,FilterChain既是FilterChain又是Filter,那么FilterChain就可以调用Filter的方法doFilter(Request,Resopnse,FilterChain)
(3)FilterChain的doFilter(Request,Resopnse,FilterChain)中,有index标记了执行到第几个Filter,当所有Filter执行完后request处理后,就会return,以倒序继续执行response处理
二、代码
1.Filter.java
2.HTMLFilter.java
3.SensitiveFilter.java
4.FilterChian.java
5.Request.java
6.Response.java
7.Test.java
1.Filter.java
- public interface Filter {
- public void doFilter(Request request, Response response, FilterChain filterChain);
- }
2.HTMLFilter.java
- public class HTMLFilter implements Filter {
- @Override
- public void doFilter(Request request, Response response,
- FilterChain filterChain) {
- request.setRequestStr(request.getRequestStr().replace('<', '[').replace(">", "]")+"---HTMLFilter()");
- filterChain.doFilter(request, response, filterChain);
- response.setResponseStr(response.getResponseStr()+"---HTMLFilter()");
- }
- }
3.SensitiveFilter.java
- public class SensitiveFilter implements Filter {
- @Override
- public void doFilter(Request request, Response response,
- FilterChain filterChain) {
- request.setRequestStr(request.getRequestStr().replace("敏感", "幸福")+"---SensitiveFilter()");
- filterChain.doFilter(request, response, filterChain);
- response.setResponseStr(response.getResponseStr()+"---SensitiveFilter()");
- }
- }
4.FilterChian.java
- public class FilterChain implements Filter {
- private List<Filter> filters = new ArrayList<Filter>();
- int index = 0; //标记执行到第几个filter
- //把函数的返回值设为FilterChain,返回this,就能方便链式编写代码
- public FilterChain addFilter(Filter filter) {
- filters.add(filter);
- return this;
- }
- public void doFilter(Request request, Response response, FilterChain fc) {
- if(index == filters.size()) return ;
- Filter f = filters.get(index);
- index++;
- f.doFilter(request, response, fc);
- }
- }
5.Request.java
- public class Request {
- private String requestStr;
- public String getRequestStr() {
- return requestStr;
- }
- public void setRequestStr(String requestStr) {
- this.requestStr = requestStr;
- }
- }
6.Response.java
- public class Response {
- private String responseStr;
- public String getResponseStr() {
- return responseStr;
- }
- public void setResponseStr(String responseStr) {
- this.responseStr = responseStr;
- }
- }
7.Test.java
- public class Test {
- @org.junit.Test
- public void testFilter(){
- String msg = "<html>敏感字眼</html>";
- Request request = new Request();
- request.setRequestStr(msg);
- Response response = new Response();
- response.setResponseStr("response------------");
- FilterChain fc = new FilterChain();
- fc.addFilter(new HTMLFilter()).addFilter(new SensitiveFilter());
- fc.doFilter(request, response, fc);
- System.out.println(request.getRequestStr());
- System.out.println(response.getResponseStr());
- }
- }
三、执行结果
Java-马士兵设计模式学习笔记-责任链模式-模拟处理Reques Response的更多相关文章
- Java-马士兵设计模式学习笔记-责任链模式-FilterChain功能
一.目标 增加filterchain功能 二.代码 1.Filter.java public interface Filter { public String doFilter(String str) ...
- Java-马士兵设计模式学习笔记-责任链模式-处理数据
一.目标 数据提交前做各种处理 二.代码 1.MsgProcessor.java public class MsgProcessor { private List<Filter> filt ...
- Java设计模式学习记录-责任链模式
前言 已经把五个创建型设计模式和七个结构型设计模式介绍完了,从这篇开始要介绍行为型设计模式了,第一个要介绍的行为型设计模式就是责任链模式(又称职责链模式). 责任链模式 概念介绍 责任链模式是为了避免 ...
- 学习笔记——责任链模式ChainOfResponsibility
责任链模式,主要是通过自己记录一个后继者来判断当前的处理情况.Handler中,再增加一个方法用于设置后继对象,如SetHandler(Handler obj). 然后Handler类以其子类的处理方 ...
- 设计模式学习之责任链模式(Chain of Responsibility,行为型模式)(22)
参考:http://www.cnblogs.com/zhili/p/ChainOfResponsibity.html 一.引言 在现实生活中,有很多请求并不是一个人说了就算的,例如面试时的工资,低于1 ...
- Java-马士兵设计模式学习笔记-装饰者模式
Java装饰者模式简介 一.假设有一个Worker接口,它有一个doSomething方法,Plumber和Carpenter都实现了Worker接口,代码及关系如下: 1.Worker.java p ...
- Java-马士兵设计模式学习笔记-总结
<马士兵设计模式学习>学习了以下模式: 1.装饰者模式(例子:水管工,木工) 2.策略模式(例子:老师用职称比大小.学生用成绩比大小) 3.简单工厂模式(例子:VechileFactory ...
- 编写计算器程序学习JS责任链模式
设计模式中的责任链模式能够很好的处理程序过程的逻辑判断,提高程序可读性. 责任链模式的核心在于责任链上的元素判断能够处理该数据,不能处理的话直接交给它的后继者. 计算器的基本样式: 通过div+css ...
- Python使用设计模式中的责任链模式与迭代器模式的示例
Python使用设计模式中的责任链模式与迭代器模式的示例 这篇文章主要介绍了Python使用设计模式中的责任链模式与迭代器模式的示例,责任链模式与迭代器模式都可以被看作为行为型的设计模式,需要的朋友可 ...
随机推荐
- 35.在PCB中删除元件
在PCB Editor里面,如果想进行什么操作,首先得点击这个命令,再点击你要操作的区域/元件,最后右键选择"Done",这样你才能完成一个操作.
- OpenGL Shader源码分享
Opengl shader程序,旗帜混合纹理加载,通过N张图片,能够组合出数百个:http://www.eyesourcecode.com/thread-39015-1-1.html 用GLSL做了一 ...
- Windows Phone 8内存控制研究 之 LonglistSelector使用陷阱
最近工作中常常被问到如何降低WP内存使用,便再一次开始研究内存问题,首先发现了LonglistSelector使用的一个常见问题: 概述 若将Longlistselector 控件的ItemsSour ...
- 卷积神经网络CNN介绍:结构框架,源码理解【转】
1. 卷积神经网络结构 卷积神经网络是一个多层的神经网络,每层都是一个变换(映射),常用卷积convention变换和pooling池化变换,每种变换都是对输入数据的一种处理,是输入特征的另一种特征表 ...
- Spring MVC常用的注解类
一.注解类配置 要使用springmvc的注解类,需要在springmvc.xml配置文件中用context:component-scan/扫描:  二.五大重要的注解类 1.RequestMapp ...
- Hibernate内存溢出分析一例
公司业务系统在进行压力测试时,压测24小时后系统发生内存溢出.经过分析读dump文件,发现org.hibernate.stat.StatisticsImpl类的hashmap类型的变量存储了大量数据( ...
- Using sql azure for Elmah
The MSDN docs contain the list of T-SQL that is either partially supported or not supported. For ex ...
- Codeforces Round #131 (Div. 1) B. Numbers dp
题目链接: http://codeforces.com/problemset/problem/213/B B. Numbers time limit per test 2 secondsmemory ...
- shell编程之环境变量
在shell编程里我们首先接触到的是环境变量,常用命令说明 1. 使用echo命令查看单个环境变量.例如: echo $PATH 2. 使用env查看所有环境变量.例如: env 3. 使用set查看 ...
- JAVA算法系列 冒泡排序
java算法系列之排序 手写冒泡 冒泡算是最基础的一个排序算法,简单的可以理解为,每一趟都拿i与i+1进行比较,两个for循环,时间复杂度为 O(n^2),同时本例与选择排序进行了比较,选择排序又叫直 ...