责任链设计模式就是某一个事件沿着某一个链不断的向下传递,直到找到相应的处理者对其进行处理为止。
有些类似与一个链表的遍历过程,如果我们希望找到链表指定的某个元素,我们就需要从链表表头开始遍历,直到找到这个元素为止。
下面我们可以把它当做一个链表来看待。
下面我们看看对应的类图
Client:客户端
Handler:抽象处理者
ConcreteHandler:具体处理者
public abstract class Handler {
// 为了形成一个链表的形式,所以必须保存下一个节点的引用
protected Handler successor;
// 设置该节点对象的下一个对象的引用
public void setSuccessor(Handler successor) {
this.successor = successor;
}
// 该节点处理方法
public abstract void handlerRequest(int cost);
}
public class ConcreteHandler1 extends Handler {
@Override
public void handlerRequest(int cost) {
// 如果cost为1,则该节点进行处理,否则交给下一节点处理
if (cost = 1) {
System.out.println(this.getClass().getSimpleName()+" handler event");
} else {
if (this.successor!=null) {
System.out.println(this.getClass().getSimpleName()+" post handler");
this.successor.handlerRequest(cost);
}
}
}
}
上面就是判断当前节点对象是否需要进行处理,如果不进行处理就把他传递给下一个节点对象进行处理。
public class ConcreteHandler2 extends Handler {
@Override
public void handlerRequest(int cost) {
System.out.println(this.getClass().getSimpleName()+" handler event");
}
}
下面是客户端代码,首先构造一个责任链,然后从第一个节点发送请求
Handler handler1=new ConcreteHandler1();
Handler handler2=new ConcreteHandler2();
//组装链
handler1.setSuccessor(handler2);
//发起请求
handler1.handlerRequest(2000);
Android中的责任链模式
Android中的责任链模式其实很多,最经典的就是View的事件传递。