责任链模式是一种对象的行为模式。在责任链模式里,由每一个对象对另一个的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
源代码
4个不同的请求处理对象,通过对下一级请求的引用,实现责任链
package ChainofResponsibility;
abstract class Handler {
protected Handler successor;
public void SetSuccessor(Handler successor)
{
this.successor=successor;
}
public abstract void HandleRequest(int request);
}
class ConcreteHandler1 extends Handler{
@Override
public void HandleRequest(int request) {
// TODO Auto-generated method stub
if(request>=0&&request<10){
System.out.println(this.getClass().getName()+" 处理了请求");
}else{
successor.HandleRequest(request);
}
}
}
class ConcreteHandler2 extends Handler{
@Override
public void HandleRequest(int request) {
// TODO Auto-generated method stub
if(request>=10&&request<20){
System.out.println(this.getClass().getName()+" 处理了请求");
}else{
successor.HandleRequest(request);
}
}
}
class ConcreteHandler3 extends Handler{
@Override
public void HandleRequest(int request) {
// TODO Auto-generated method stub
if(request>=20&&request<30){
System.out.println(this.getClass().getName()+" 处理了请求");
}else{
successor.HandleRequest(request);
}
}
}
class ConcreteHandler4 extends Handler{
@Override
public void HandleRequest(int request) {
// TODO Auto-generated method stub
System.out.println(this.getClass().getName()+" 处理了请求");
}
}
具体连接,以及请求的传递代码
package ChainofResponsibility;
public class Client {
public static void main(String[]args){
Handler h1=new ConcreteHandler1();
Handler h2=new ConcreteHandler2();
Handler h3=new ConcreteHandler3();
Handler h4=new ConcreteHandler4();
h1.SetSuccessor(h2);
h2.SetSuccessor(h3);
h3.SetSuccessor(h4);
int request1=30;
int request2=10;
h1.HandleRequest(request1);
h1.HandleRequest(request2);
}
}
注意:
一个请求极有可能到了链的末端都得不到处理,或者因为没有正确配置而得不到处理