Java Responsibility模式 模拟处理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

1 public interface Filter {
2     public void doFilter(Request request, Response response, FilterChain filterChain);
3 }

2.HTMLFilter.java

 1 public class HTMLFilter implements Filter {
 2
 3     @Override
 4     public void doFilter(Request request, Response response,
 5             FilterChain filterChain) {
 6         request.setRequestStr(request.getRequestStr().replace(‘<‘, ‘[‘).replace(">", "]")+"---HTMLFilter()");
 7         filterChain.doFilter(request, response, filterChain);
 8         response.setResponseStr(response.getResponseStr()+"---HTMLFilter()");
 9     }
10
11 }

3.SensitiveFilter.java

 1 public class SensitiveFilter implements Filter {
 2
 3     @Override
 4     public void doFilter(Request request, Response response,
 5             FilterChain filterChain) {
 6         request.setRequestStr(request.getRequestStr().replace("敏感", "幸福")+"---SensitiveFilter()");
 7         filterChain.doFilter(request, response, filterChain);
 8         response.setResponseStr(response.getResponseStr()+"---SensitiveFilter()");
 9     }
10
11 }

4.FilterChian.java

 1 public class FilterChain implements Filter {
 2
 3     private List<Filter> filters = new ArrayList<Filter>();
 4     int index = 0;    //标记执行到第几个filter
 5
 6     //把函数的返回值设为FilterChain,返回this,就能方便链式编写代码
 7     public FilterChain addFilter(Filter filter) {
 8         filters.add(filter);
 9         return this;
10     }
11
12     public void doFilter(Request request, Response response, FilterChain fc) {
13         if(index == filters.size()) return ;
14         Filter f = filters.get(index);
15         index++;
16         f.doFilter(request, response, fc);
17     }
18
19 }

5.Request.java

 1 public class Request {
 2
 3     private String requestStr;
 4
 5     public String getRequestStr() {
 6         return requestStr;
 7     }
 8
 9     public void setRequestStr(String requestStr) {
10         this.requestStr = requestStr;
11     }
12
13 }

6.Response.java

 1 public class Response {
 2
 3     private String responseStr;
 4
 5     public String getResponseStr() {
 6         return responseStr;
 7     }
 8
 9     public void setResponseStr(String responseStr) {
10         this.responseStr = responseStr;
11     }
12
13 }

7.Test.java

 1 public class Test {
 2
 3     @org.junit.Test
 4     public void testFilter(){
 5
 6         String msg = "<html>敏感字眼</html>";
 7
 8         Request request = new Request();
 9         request.setRequestStr(msg);
10         Response response = new Response();
11         response.setResponseStr("response------------");
12
13         FilterChain fc = new FilterChain();
14         fc.addFilter(new HTMLFilter()).addFilter(new SensitiveFilter());
15
16         fc.doFilter(request, response, fc);
17         System.out.println(request.getRequestStr());
18         System.out.println(response.getResponseStr());
19
20     }
21
22 }

三、执行结果

时间: 2024-05-11 13:04:08

Java Responsibility模式 模拟处理Reques Response的相关文章

Java 实现责任链(Chain of Responsibility)模式

类图 /** * 抽象责任 * @author stone * */ public abstract class IFilter { private IFilter successor; public IFilter getSuccessor() { return successor; } public void setSuccessor(IFilter successor) { this.successor = successor; } public abstract void handleF

&lt;代码整洁之道&gt;、&lt;java与模式&gt;、&lt;head first设计模式&gt;读书笔记集合

一.前言                                                                                       几个月前的看书笔记,内容全部都是摘自书中比较精辟的句子.笔记都是一段一段的句子,故没有文章的篇幅概念,仅供温习之用,更多详细内容请看原书!!! <代码整洁之道>里面有很多前人编写简洁.漂亮代码的经验.当然书中作者的经验并不100%适合每个人,但大部分都是可借鉴的! <java与模式>这本书内容太多了,我

Java组合模式(Composite模式)

Composite定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Composite就应该想到树形结构图.组合体内这些对象都有共同接口,当组合体一个对象的方法被调用执行时,Composite将遍历(Iterator)整个树形结构,寻找同样包含这个方法的对象并实现调用执行.可以用牵一动百来形容. 所以Composite模式使用到Iterator模式,和Chain of Responsibilit

Java Master-Worker模式实现

Master-Worker模式简介 Master-Worker模式是非常经典的常用的一个并行计算模式,它的核心思想是2类进程协作工作:Master进程和Worker进程.Master负责接收客户端请求,分配任务:Worker负责具体处理任务.当各个Worker处理完任务后,统一将结果返回给Master,由Master进行整理和总结.其好处是能够将一个大JOB分解成若干小JOB,并行执行,从而提高系统的吞吐量.比如流行的Web Server,如Nginx,Apache HTTP都存在这种Maste

Java Future模式实现

Java Future模式简介 Future模式是Java多线程常用的模式,而且JDK也内置对Future模式的支持,比如在java.util.concurrent包下的FutureTask类.其核心思想在于:发出请求后,可以立即返回对象,但是这个对象实际上是个假对象,并不可立即使用,但是我们可以在干点别的事情后,就可以使用这个假对象获取结果了.这是为什么呢?因为在返回假对象的时候,偷偷的开启了一个线程去请求真正的结果数据.那么下面,我们来模拟实现下Future模式. 代码实现与分析 主流程是:

Java设计模式--Java Builder模式

1.Java Builder模式主要是用一个内部类去实例化一个对象,避免一个类出现过多构造函数,而且构造函数如果出现默认参数的话,很容易出错. public Person(String name) Person(String name, int age) Person(String name, int age, boolean sex) 2.Android OkHttp框架中Request.Response类都使用了Java Builder模式. 3.下面举一个小例子: /** * @autho

java代理模式学习

Java动态代理模式 1. 代理:一个角色代表别一个角色来完成某些特定的功能. 比如:生产商,中间商,客户这三者这间的关系 客户买产品并不直接与生产商打交道,也不用知道产品是如何产生的,客户只与中间商打交道,而中间商就可以对产品进行一些包装,提供一些售后的服务. 代理模式有三个角色: 1. 抽象主题角色 2. 代理主题角色 3. 实际被代理角色 其它类通过访问代理主题角色来访问实际被代理角色. 2. 下面我们来个一个静态代理的实现. 我以一个坦克为例. 抽象主题角色:Moveable Java代

《JAVA与模式》之迭代器模式

定义:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节. 类型:行为类模式 类图: 1 public static void main(String[] args) { 2 List<Object> list = new ArrayList<Object>(); 3 list.add("a"); 4 list.add("b"); 5 list.add("c"); 6 Aggregate aggregate

java 工厂模式变形的多种应用

工厂模式在项目开发中是使用效率非常高的,意思就是说定义一个用于创建对象的接口,让子类去决定实例化哪一个类.这就是一个工厂类的示意图 接着来一个简单的例子: 如上图所示,我们首先定义我们的产品抽象类接口,也可以是抽象类: package factory; public abstract class PlatForm { public void search(){ System.out.println("你搜索的结果是......"); } public abstract void mus