一.责任链模式
责任链模式为请求创建了一个接收者对象的链。
举个例子,你是一个大学生,想要请假,三天内找辅导员批,三到五天找学办批,五天以上找学校批.
所以说,责任链每一层都处理自己请求范围内的责任,超过范围抛给下一个,而请求者,也就是你不需要关心假条是怎么被批的.
职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。
二.代码实现
//处理请求
abstract class Handler{
protected Handler nexthandler;
public void setNexthandler(Handler nexthandler){
this.nexthandler = nexthandler;
}
public abstract void process(Integer info);
}
//第一层
class Leader extends Handler{
@Override
public void process(Integer info) {
if(info<10){
System.out.println("Leader handler");
}else{
nexthandler.process(info);
}
}
}
//第二层
class Boss extends Handler{
@Override
public void process(Integer info) {
System.out.println("Boss handler");
}
}
测试
public static void main(String[] args) {
Handler level1 = new Leader();
Handler level2 = new Boss();
level1.setNexthandler(level2);
level1.process(10);
level2.process(11);
}
三.优缺点分析
优
1、降低耦合度。它将请求的发送者和接收者解耦。
2、简化了对象。使得对象不需要知道链的结构。
3、增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。
4、增加新的请求处理类很方便。
劣
1、不能保证请求一定被接收。
2、系统性能将受到一定影响,而且在进行代码调试时不太方便,可能会造成循环调用。
3、可能不容易观察运行时的特征,有碍于除错。