设计模式-责任链模式
一、所涉及的类
一个抽象接口:里面定义一个 该接口的属性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{@Overrideprotected 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{@Overrideprotected 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{@Overrideprotected 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方法交给下一个节点来处理