责任链模式(Chain of Responsibility)的标准版
2012-06-10 16:22
706 查看
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
责任链模式(Chain of Responsibility)可以说是一个非常非常常用的模式,开源框架、 tomcat、jetty、mina 等里面到处都是。
最初学习这个模式的时候,各种版本的都有,反正设计模式也只是给出了一个抽象的表达,并没说怎么写才是对的,只要把思想表达出来就可以了,未必要把自己框死在某个范围里面。
但是呢,在看开源框架的时候,发现牛人们似乎都喜欢用同一种写法来表达这个模式,所以也就细细的思考了一会,虽然说不出来一个所以然来,但还是觉得牛人们的写法就是好,所以就写了这篇文章。
以下是责任链模式的开源代码里面的最常见的版本。
package design.filter.filter3; /** * 过滤器接口 * @author li * */ public interface Filter { void doFilter(Request req, Response res, FilterChain chain); }
package design.filter.filter3; /** * 过滤器链 * @author li * */ public interface FilterChain { void invokeNext(Request req, Response res); }
package design.filter.filter3; public class Request { }
package design.filter.filter3; public class Response { }
package design.filter.filter3; import java.util.Vector; /** * 过滤器支持类 * @author li * */ public class FilterSuport { private Vector<Filter> filters = new Vector<Filter>(); public FilterSuport addFilter(Filter f) { filters.add(f); return this; } public void invoke(Request req, Response res) { new FilterChainSupport().invokeNext(req, res); } /** * 过滤器链表支持类 * @author li * */ private class FilterChainSupport implements FilterChain { int index = -1; @Override public void invokeNext(Request req, Response res) { if (++index < filters.size()) { filters.get(index).doFilter(req, res, this); } else { return; } } } }
package design.filter.filter3;
//测试 public class Test { public static void main(String[] args) { Request req = new Request(); Response res = new Response(); FilterSuport chain = new FilterSuport(); chain.addFilter(new Filter() { public void doFilter(Request req, Response res, FilterChain chain) { System.out.println("进1"); chain.invokeNext(req, res); System.out.println("出1"); } }).addFilter(new Filter() { public void doFilter(Request req, Response res, FilterChain chain) { System.out.println("进2"); chain.invokeNext(req, res); System.out.println("出2"); } }); chain.invoke(req, res); } }
相关文章推荐
- 17、责任链模式(Chain of Responsibility)
- Chain of Responsibility 责任链模式
- Chain of Responsibility(责任链模式)
- 责任链模式 Chain Of Responsibility
- JAVA设计模式(17) —<行为型>责任链模式(Chain of Responsibility)
- JAVA--责任链模式(Chain of Responsibility)--设计模式十七
- 设计模式:责任链模式(Chain of Responsibility)
- 设计模式——行为型模式之借助责任链模式(Chain of Responsibility)灵活完成链式处理(五)
- 设计模式之责任链模式(Chain of Responsibility)
- 责任链模式(Chain of Responsibility)----行为笔记
- java设计模式17——责任链模式(Chain of Responsibility)
- 每天一个设计模式: 责任链模式(Chain Of Responsibility)
- 设计模式之---责任链模式(Chain of Responsibility)
- 设计模式(4)-行为型-责任链模式(Chain of Responsibility)
- 责任链模式(Chain of Responsibility)
- 责任链模式(chain of responsibility)
- chain of Responsibility 责任链模式学习总结
- 责任链模式/Chain Of Responsibility
- 责任链模式(Chain of Responsibility)
- 设计模式(4)-行为型-责任链模式(Chain of Responsibility)