一、所涉及的类
一个抽象接口:里面定义一个 该接口的属性next节点,外加set get 方法,以及请求处理方法
N个抽象接口实现类:实现请求处理方法,如果自己能处理则处理,如果处理不了则调用getnext方法调用返回值的请求处理方法
注意:在调用类中创建各个节点,并通过setNext的方式来定义各个节点的顺序,类似于审批流
二、实现代码
抽象接口
public abstract class Approval {
private Approval next;
public void setNext(Approval next)
{
this.next = next;
}
public Approval getNext()
{
return next;
}
protected abstract void handle(String request);
}
抽象接口实现类1
public class AskApprovalFromBoss extends Approval{
@Override
protected void handle(String request) {
if (request.equals("Ask")){
System.out.println("请假老板审批通过");
if (getNext() != null ){
getNext().handle(request);
}else{
System.out.println("审批结束");
}
}else{
getNext().handle(request);
}
}
}
抽象接口实现类2
public class AskApprovalFromLeader extends Approval{
@Override
protected void handle(String request) {
if (request.equals("Ask")){
System.out.println("请假组长审批通过");
if (getNext() != null ){
getNext().handle(request);
}else{
System.out.println("审批结束");
}
}else{
getNext().handle(request);
}
}
}
抽象接口实现类3
public class ResignApprovalFromBoss extends Approval{
@Override
protected void handle(String request) {
if (request.equals("Resign")){
System.out.println("离职老板审批通过");
if (getNext() != null ){
getNext().handle(request);
}else{
System.out.println("审批结束");
}
}else{
getNext().handle(request);
}
}
}
调用类
public class ChainApplication {
public static void main(String[] args) {
/**
* 改实现是设置了三个审批节点,发起请假的流程,只有 Leader和Boss可以审批,boss的离职审批节点不做处理
*/
Approval askApprovalFromLeader = new AskApprovalFromLeader();
Approval askApprovalFromBoss = new AskApprovalFromBoss();
Approval resignApprovalFromBoss = new ResignApprovalFromBoss();
askApprovalFromLeader.setNext(resignApprovalFromBoss);
resignApprovalFromBoss.setNext(askApprovalFromBoss);
askApprovalFromLeader.handle("Ask");
}
}
三、总结
责任链模式是在调用类中指定链式关系,并在处理方法中判断是不是自己处理,如果不是则调用getNext方法交给下一个节点来处理