高端网站设计教程,诸城网站建设0536s,安徽省网站肥建设网站,乐清建站设计模式—行为型模式之责任链模式
责任链#xff08;Chain of Responsibility#xff09;模式#xff1a;为了避免请求发送者与多个请求处理者耦合在一起#xff0c;于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链#xff1b;当有请求发生时Chain of Responsibility模式为了避免请求发送者与多个请求处理者耦合在一起于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链当有请求发生时可将请求沿着这条链传递直到有对象处理它为止。它属于对象行为型模式。
包含如下角色
抽象处理者Handler角色定义一个处理请求的接口包含抽象处理方法和一个后继连接。具体处理者Concrete Handler角色实现抽象处理者的处理方法判断能否处理本次请求如果可以处理请求则处理否则将该请求转给它的后继者。客户类Client角色负责创建处理链并向链头的具体处理者对象提交请求它不关心处理细节和请求的传递过程。
示例
员工在企业请假需要小组长审批再由领导审批再由人事同意才可以。
抽象工作人员类如下
Data
ToString
public abstract class Worker {private String name;//下一个处理者private Worker nextHandler;/*** 处理请求*/public abstract void handleRequest();
}请假者和审批者如下
/*** 请假者*/
public class LeaveEmployee extends Worker{Overridepublic void handleRequest(){System.out.println(this.getName() 发起请假请求);//链子下一个进行请求if(this.getNextHandler() ! null){this.getNextHandler().handleRequest();}}
}
/**
审批者
*/
public class Approver extends Worker{Overridepublic void handleRequest() {System.out.println(this.getName() 正在处理);if(this.getNextHandler() ! null){//下一个人去请求this.getNextHandler().handleRequest();}else{System.out.println(到this.getName()这里最终处理完成);}}
}测试类如下
public class ChainTest {public static void main(String[] args) {//请假者LeaveEmployee leaveEmployee new LeaveEmployee();leaveEmployee.setName(张三);//审批者1Approver approver1 new Approver();approver1.setName(审批者1号);//审批者2号Approver approver2 new Approver();approver2.setName(审批者2号);//审批者3号Approver approver3 new Approver();approver3.setName(审批者3号);//组装链条leaveEmployee.setNextHandler(approver1);approver1.setNextHandler(approver2);approver2.setNextHandler(approver3);//请假leaveEmployee.handleRequest();}
}运行结果如下