链表结构
Node类(节点) 每一个对象 管理一个值
0.属性 Node prev (找到上一个责任人在哪里)
1.属性 Object value (存值)
2.属性 Node next (找到下一个责任人在哪里)
过滤器链(责任链设计模式)
Chain of Responsbility Pattern
Filter类 每一个filter对象 管理当前filter做的事情
doFilter方法
模拟过滤器链底层
package myfilterchain;public interface FilterChain {void addFilter(Filter filter);void doFilter();}
package myfilterchain;public interface Filter {void doFilter(FilterChain chain);}
package myfilterchain;public abstract class HttpFilter implements Filter{@Overridepublic abstract void doFilter(FilterChain chain);}
package myfilterchain;import java.util.ArrayList;//这个类负责将所有Filter对象串联起来public class ApplicationFilterChain implements FilterChain{//需要一个容器将所有的Filter对象存储起来---集合private ArrayList<Filter> filterArrayList=new ArrayList<>();private int index=0;//提供一个方法将反射得来的对象存入集合,此处省略反射解析过程@Overridepublic void addFilter(Filter filter){filterArrayList.add(filter);}//每次找寻一个责任人@Overridepublic void doFilter(){if(index<filterArrayList.size()){//按顺序找责任人并让责任人做事Filter currentFilter=filterArrayList.get(index++);currentFilter.doFilter(this);}else {//找真正的资源做事,此处略System.out.println("我去找真正的资源做事了");}}}
package myfilterchain;public class FilterOne extends HttpFilter{@Overridepublic void doFilter(FilterChain chain) {//做自己的事System.out.println("one做事");//找管理者,让管理者找下一个责任人 放行chain.doFilter();}}
package myfilterchain;public class FilterTwo extends HttpFilter{@Overridepublic void doFilter(FilterChain chain) {//做自己的事System.out.println("two做事");//找管理者,让管理者找下一个责任人 放行chain.doFilter();}}
package myfilterchain;public class FilterThree extends HttpFilter{@Overridepublic void doFilter(FilterChain chain) {//做自己的事System.out.println("three做事");//找管理者,让管理者找下一个责任人 放行chain.doFilter();}}
package myfilterchain;//模拟存入Filter对象后过滤链public class FilterTestMain {public static void main(String[] args){//Tomcat启动,读取web.xml配置文件,//目的获取请求名---真实类名对应关系,Tomcat底层有一个集合(请求名字,对象)//反射 通过类名创建对象FilterChain filterChain=new ApplicationFilterChain();filterChain.addFilter(new FilterOne());filterChain.addFilter(new FilterTwo());filterChain.addFilter(new FilterThree());filterChain.doFilter();}}

