设计模式之责任链模式
来源:互联网 发布:javascript 数据库 编辑:程序博客网 时间:2024/04/26 03:49
责任链模式的核心思想是让请求对象(Request)沿着链(chain)按照一定顺序(ordered)依次传递下去,链上的每个处理器(Filter)都有机会去处理请求(request)。 客户端只需把请求传递给链(chain)上的第一个处理器(filter)即可,至于被谁处理,客户端不care。
/** * Test.java * * @author zhanghui * */public class Test { public static void main(String[] args) { FilterManager.service(new Request(), new Response()); }}class Request {}class Response {}class FilterManager { private static Filter firstFilter = null; static { // 可以把所有的filter放到配置文件中,然后这里从配置文件中初始化所有filter Filter f1 = new MyFilter1(); Filter f2 = new MyFilter2(); Filter f3 = new MyFilter3(); f1.setNextFilter(f2); f2.setNextFilter(f3); f3.setNextFilter(new NullFilter()); firstFilter = f1; } public static void service(Request req, Response resp) { if (firstFilter != null) { firstFilter.process(req, resp); } }}interface Filter { void setNextFilter(Filter filter); void process(Request req, Response resp);}abstract class AbstractFilter implements Filter { protected Filter next; public void setNextFilter(Filter next) { this.next = next; }}class MyFilter1 extends AbstractFilter { public void process(Request req, Response resp) { System.out.println("before MyFilter1..."); next.process(req, resp); System.out.println("after MyFilter1..."); }}class MyFilter2 extends AbstractFilter { public void process(Request req, Response resp) { System.out.println("before MyFilter2..."); next.process(req, resp); System.out.println("after MyFilter2..."); }}class MyFilter3 extends AbstractFilter { public void process(Request req, Response resp) { System.out.println("before MyFilter3..."); next.process(req, resp); System.out.println("after MyFilter3..."); }}class NullFilter extends AbstractFilter { public void process(Request req, Response resp) { // do nothing }}
运行结果:
before MyFilter1...
before MyFilter2...
before MyFilter3...
after MyFilter3...
after MyFilter2...
after MyFilter1...
- 设计模式之责任链
- 设计模式之责任链
- 设计模式之【责任链】
- 设计模式之责任链
- 设计模式之责任链
- 设计模式之责任链
- 十 设计模式之责任链模式
- 设计模式之--责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- 【设计模式】之责任链模式
- java设计模式之责任链模式
- 设计模式之(责任链模式)
- 设计模式之--责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- TCP连接探测中的Keepalive 和心跳包
- Stack实现
- Java异常分类
- Linux中seq_file文件系统实例剖析
- SSH的测试工具——JUnit4
- 设计模式之责任链模式
- excel文档插入新列报错:为了防止数据丢失,excel不能从表中移走非空单元格。
- mysql 远程登录及常用命令
- ios,xmpp 添加好友与好友请求处理
- android源码中设置语言的代码相关位置
- 局域网与互联网环境下MTU的快速确定方法
- 简单分页 小function
- FireFox中file控件不能取到客户端文件的完整路径的问题(2012.11.27)
- php 开源模版大全