一、背景
相信大家都到政府部门办过事情,拿着一个申请或者证明什么的,首先需要到A部门盖章,然后到B机构盖章,然后到C单位签字,想想如果他们的职责改变了(意味着你盖章签字的顺序要发什么改变),或者他们之间又新增了一个机构,你是不是还得了重新知道他们之间的盖章签字顺序。如果是在系统中实现这么个场景,怎么搞?顺序变的话去修改执行代码的顺序?增加机构的时候加入新机构的代码?是不是挺麻烦?是不是违反了开闭原则?所以责任链模式出现了。
二、概念
在责任链模式中,很多对象由每一个对象对其下家的引用而形成的一条链。请求在该链上传递,直到某个对象决定对该请求处理,客户端对哪个对象处理该请求并不关心,使得在不影响客户端的情况下可以重新调整和分配责任。
三、代码实例
/**
* 抽象责任处理角色
*/
abstract class Handler {
protected Handler nextHandler;// 后继责任处理者
public Handler getNextHandler() {
return nextHandler;
}
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
public abstract void opreator();
}
/**
* 具体责任角色
*/
class MyHandlers extends Handler {
String name;
public MyHandlers(String name) {
this.name = name;
}
@Override
public void opreator() {
System.out.println(this.name + "处理请求");
if (getNextHandler() != null) {
getNextHandler().opreator();
}
}
}
public class ChainOfResponsibilityPattern {
public static void main(String agrs[]) {
// 实例化后生成一系列相互持有的对象,构成一条责任链。
Handler handlerA = new MyHandlers("A对象");
Handler handlerB = new MyHandlers("B对象");
Handler handlerC = new MyHandlers("C对象");
handlerA.setNextHandler(handlerB);
handlerB.setNextHandler(handlerC);
handlerA.opreator();
}
}