责任链模式

概述
    责任链模式(Chain of Responsibility),是行为型设计模式之一。在编程中,将每一个节点看做是一个对象,每一个对象拥有不同的处理逻辑,将一个请求从链式的首端发出,沿着链的路径一次传递给每一节点对象,直到有对象处理这个请求为止。

定义
    使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。

简单实现
    假设小明需要找公司领导报销差旅费5W元。小明找到组长,组长发现数额太大他没有审批权,于是组长找到部门主管。部门主管只能审批五千元一下的费用,于是部门主管又跑去找经理,经理一看二话不说就找到了老板办公室,因为他也只能批1W以下的费用。上面的场景实际就是一个责任链的例子。小明的请求经过层层传达直至请求被处理,自始至终小明只与组长产生关联,后面具体由谁处理的票据小明并不关心。责任链模式在这里很好的将请求者与处理者解耦。代码模拟如下:

packagecom.zionstudio.okhttp_1003;


public abstract classLeader {
protectedLeadernextHandler;//下一个处理者
protected finalStringTAG= getClass().getSimpleName();

public final voidhandleRequest(intmoney) {
if(money <= limit()) {
handle(money);
}else{
nextHandler.handleRequest(money);
}
}

public abstract intlimit();

public abstract voidhandle(intmoney);
}
    
    首先定义一个抽象的处理者类,然后创建具体的处理者
packagecom.zionstudio.okhttp_1003;

importandroid.util.Log;



public classGroupLeaderextendsLeader {
@Override
public intlimit() {
return1000;
}

@Override
public voidhandle(intmoney) {
Log.i(TAG,"组长批复"+ money +"元");
}
}

packagecom.zionstudio.okhttp_1003;

importandroid.util.Log;



public classDirectorextendsLeader {
@Override
public intlimit() {
return5000;
}

@Override
public voidhandle(intmoney) {
Log.i(TAG,"主管批复"+ money +"元");
}
}

packagecom.zionstudio.okhttp_1003;

importandroid.util.Log;



public classManagerextendsLeader {
@Override
public intlimit() {
return10000;
}

@Override
public voidhandle(intmoney) {
Log.i(TAG,"经理批复"+ money +"元");
}
}

packagecom.zionstudio.okhttp_1003;

importandroid.util.Log;



public classBoss extends Leader {
@Override
public intlimit() {
return50000;
}

@Override
public voidhandle(intmoney) {
Log.i(TAG,"老板批复"+ money +"元");
}
}

    然后实例化各个处理者,并将他们连成链
GroupLeader groupLeader =newGroupLeader();
Director director =newDirector();
Manager manager =newManager();
Boss boss =newBoss();
groupLeader.nextHandler= director;
director.nextHandler= manager;
manager.nextHandler= boss;

groupLeader.handleRequest(10000);



注意
    对于责任链中的每一个处理者对象,其只有两个行为,一是处理请求,二是将请求转送给下一个节点,不允许某个处理者对象在处理了请求之后又将请求转送给下一个节点。对一条责任链来说,一个请求最终只有两种情况,一是被某个处理对象处理,另一个是所有对象都没有对其处理,对于前一种情况我们称该责任链为纯的责任链,对于后一种情况我们称为不纯的责任链。实际应用中,我们所见到的责任链模式大多为不纯的责任链。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值