设计模式 行为型模式 -- 职责链模式(JDK源码分析:FilterChain(过滤器))
Posted CodeJiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式 行为型模式 -- 职责链模式(JDK源码分析:FilterChain(过滤器))相关的知识,希望对你有一定的参考价值。
设计模式 行为型模式 – 职责链模式(定义、结构、纯与不纯的职责链模、具体案例)
1. JDK源码分析:FilterChain
下面的代码都是模拟源码仿写的,是为了简化代码,突出的是职责链模式的思想。
1.1 模拟web请求Request以及web响应Response
Request.java
package com.tian.responsibility.jdk;
/**
* @version v1.0
* @ClassName: Request
*/
public interface Request {
}
Response.java
package com.tian.responsibility.jdk;
/**
* @version v1.0
* @ClassName: Response
* @Description: TODO(一句话描述该类的功能)
* @Author: 黑马程序员
*/
public interface Response {
}
1.2 模拟web过滤器Filter
Filter.java
package com.tian.responsibility.jdk;
/**
* @version v1.0
* @ClassName: Filter
*/
public interface Filter {
public void doFilter(Request req, Response res, FilterChain c);
}
1.3 模拟实现具体过滤器
FirstFilter.java
package com.tian.responsibility.jdk;
/**
* @version v1.0
* @ClassName: FirstFilter
*/
public class FirstFilter implements Filter {
public void doFilter(Request req, Response res, FilterChain chain) {
System.out.println("过滤器1 前置处理");
// 先执行所有request再倒序执行所有response
chain.doFilter(req, res);
System.out.println("过滤器1 后置处理");
}
}
SecondFilter.java
package com.tian.responsibility.jdk;
/**
* @version v1.0
* @ClassName: FirstFilter
*/
public class SecondFilter implements Filter {
public void doFilter(Request req, Response res, FilterChain chain) {
System.out.println("过滤器2 前置处理");
// 先执行所有request再倒序执行所有response
chain.doFilter(req, res);
System.out.println("过滤器2 后置处理");
}
}
1.4 模拟实现过滤器链FilterChain
package com.tian.responsibility.jdk;
import java.util.ArrayList;
import java.util.List;
/**
* @version v1.0
* @ClassName: FilterChain
*/
public class FilterChain { //过滤器链
private List<Filter> filters = new ArrayList<Filter>();
private int index = 0;
// 构造职责类:链式调用
public FilterChain addFilter(Filter filter) {
this.filters.add(filter);
return this;
}
public void doFilter(Request request, Response response) {
if (index == filters.size()) {
return;
}
Filter filter = filters.get(index);
index++;
filter.doFilter(request, response, this);
}
}
1.5 客户端类:测试类
package com.tian.responsibility.jdk;
/**
* @version v1.0
* @ClassName: Client
* @Description: 客户端类:测试类
*/
public class Client {
public static void main(String[] args) {
Request req = null;
Response res = null;
FilterChain filterChain = new FilterChain();
filterChain.addFilter(new FirstFilter()).addFilter(new SecondFilter());
filterChain.doFilter(req, res);
}
}
1.6 运行结果
以上是关于设计模式 行为型模式 -- 职责链模式(JDK源码分析:FilterChain(过滤器))的主要内容,如果未能解决你的问题,请参考以下文章