责任链模式是对象行为型模式
在责任链模式里,很多对象有每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态的重新组织链和分配责任
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一个简单的责任链模式:
package com.hh.chainofresp_01;
/**
* 抽象处理者角色
* @author hh
* 2017-10-11
*/
public abstract class Handler {
protected Handler successor;
/**
* 处理方法,调用此方法处理请求
*/
public abstract void handlerRequest();
public Handler getSuccessor() {
return successor;
}
public void setSuccessor(Handler successor) {
this.successor = successor;
}
}
package com.hh.chainofresp_01;
/**
* 具体处理者角色
* @author hh
* 2017-10-11
*/
public class ConcreteHandler extends Handler {
/**
* 处理方法,调用此方法处理请求
*/
@Override
public void handlerRequest() {
if (getSuccessor() != null) {
System.out.println("The request is passed to " + getSuccessor());
getSuccessor().handlerRequest();
} else {
System.out.println("The request is handler here");
}
}
}
package com.hh.chainofresp_01;
/**
* 客户端
* @author hh
* 2017-10-11
*/
public class Client {
private static Handler handler1, handler2;
public static void main(String[] args) {
handler1 = new ConcreteHandler();
handler2 = new ConcreteHandler();
handler1.setSuccessor(handler2);
handler1.handlerRequest();
}
}
本文出自《java与模式》一书,为自主学习
Servlet中的filter也是采用了责任链模式,在网上找到一个类似的源码,http://www.cnblogs.com/ysw-go/p/5432921.html