一.什么是责任链模式
责任链模式是多个对象都有机会处理请求,从而避免请求的发送者和接收者耦合关系,将这个对象连成一条链,并沿着这个链进行传递,直到有人处理这个请求。
二.责任链模式的写法
我们用一个在工作中常见的一件事来描述责任链模式,比如我们在工作中请假,加薪的请求。我们可能要首先要向主管请假,主管如果有这个权限批准,就直接批准了,如果没有可能要向上一级申请,这样就可能需要一个链式的关系。我们来看看UML类图:
我们来看看代码的实现,Manager:
public abstract class Manager {
protected Manager nextManager;
public void setNextHandler(Manager nextManager) {
this.nextManager=nextManager;
};
public abstract void handlerRequest(Request request);
}
老板:
public class Boss extends Manager {
@Override
public void handlerRequest(Request request) {
switch (request.requestType) {
case "加薪":
System.out.println("老板批准加薪!");
return;
}
if (nextManager != null) {
nextManager.handlerRequest(request);
}
}
}
主管:
public class PM extends Manager{
@Override
public void handlerRequest(Request request) {
switch (request.requestType) {
case "请假":
System.out.println("主管批准请假!");
return;
}
if(nextManager!=null) {
System.out.println("主管没有权限!交由老板处理。");
nextManager.handlerRequest(request);
}
}
}
请求:
public class Request {
public String requestType;
}
客户端调用:
public static void main(String[] args) {
Boss boss=new Boss();
PM pm=new PM();
pm.nextManager=boss; //设置上一级
Request request=new Request();
request.requestType="请假";
Request request1=new Request();
request1.requestType="加薪";
Request[] requsets=new Request[] {request,request1};
for (int i = 0; i < requsets.length; i++) {
pm.handlerRequest(requsets[i]);
}
}
结果输出:
主管批准请假!
主管没有权限!交由老板处理。
老板批准加薪!
这个就是标准的责任链模式。
三.总结
本文介绍了什么是责任链模式以责任链模式的常见写法,记住,责任链模式在android的体现比较明显的就是事件的分发消费机制了,这里就不多讲,下次在写一篇详细聊聊android事件机制,如果本文对你有用,可以点个赞,如果有不正之处,欢迎留下你的评论,谢谢!