1.概述
所谓责任链就是你能做就做,不能就推给别人做,是不是很好理解。例如以我们公司请假为例,5天以下总监可以批,5天以上就得总经理批,要是更长就得CEO老板批。
2.UML结构图
![](https://img.haomeiwen.com/i3860603/15d99964d5e5bbbc.png)
![](https://img.haomeiwen.com/i3860603/d789fdcd79c2ec2a.png)
3.代码实现:以我们公司请假为例
AbstractHandler:抽象处理角色
/**
* Copyright (c) 2019. All rights reserved.
* Created by zhouwen on 2019/7/20.
*/
public abstract class AbstractHandler {
private AbstractHandler mAbstractHandler;
public void setNextIns(AbstractHandler abstractHandler) {
mAbstractHandler = abstractHandler;
}
public AbstractHandler getNextIns() {
return mAbstractHandler;
}
public abstract void onHandlerMessage(int days);
}
CEO:具体处理角色---老板
/**
* Copyright (c) 2019. All rights reserved.
* Created by zhouwen on 2019/7/20.
*/
public class CEO extends AbstractHandler {
@Override
public void onHandlerMessage(int days) {
if(days <= 60){
Logger.getLogger("CEO").info("老板可以批准");
} else {
Logger.getLogger("CEO").info("可以滚蛋了");
}
}
}
Manager:具体处理角色---总经理
/**
* Copyright (c) 2019. All rights reserved.
* Created by zhouwen on 2019/7/20.
*/
public class Manager extends AbstractHandler {
@Override
public void onHandlerMessage(int days) {
if (days <= 10) {
Logger.getLogger("Manager").info("总经理可以批准");
} else {
if (getNextIns() != null) {
Logger.getLogger("Manager").info("总经理批准不了,需要上报老板");
getNextIns().onHandlerMessage(days);
} else {
Logger.getLogger("Manager").info("总经理也请假了。。。。");
}
}
}
}
Inspector:具体处理角色---总监
/**
* Copyright (c) 2019. All rights reserved.
* Created by zhouwen on 2019/7/20.
*/
public class Inspector extends AbstractHandler {
public void setNextIns(AbstractHandler abstractHandler) {
super.setNextIns(abstractHandler);
}
@Override
public void onHandlerMessage(int days) {
if (days <= 5){
Logger.getLogger("Inspector").info("总监可以批准");
} else {
if (getNextIns() != null) {
getNextIns().onHandlerMessage(days);
Logger.getLogger("Inspector").info("总监批准不了,需要上报总经理");
} else {
Logger.getLogger("Inspector").info("总监也请假了。。。。");
}
}
}
}
Staff:客户角色---员工类
/**
* Copyright (c) 2019. All rights reserved.
* Created by zhouwen on 2019/7/20.
*/
public class Staff {
public void test(){
AbstractHandler inspector = new Inspector();
AbstractHandler manager = new Manager();
AbstractHandler ceo = new CEO();
inspector.setNextIns(manager);
manager.setNextIns(ceo);
inspector.onHandlerMessage(5);
}
}
4.android中应用场景
Android的View事件传递机制就是基于责任链模式。
事件传递基于:Activity-->ViewGroup-->View的顺序。当前返回true则说明自己处理,false反之.
如图:当下面事件序列都方法false时
![](https://img.haomeiwen.com/i3860603/4985ecdcfd0758cc.png)
如图:当下面事件序列都方法true时
![](https://img.haomeiwen.com/i3860603/b992c77df50a3e28.png)
网友评论