责任链模式

来源:互联网 发布:mac里的照片如何导出 编辑:程序博客网 时间:2024/06/05 00:37

package ChainOfResponsibility;/*** * 封装请假基本信息 *  * @author zw * */public class LeaveRequest {private String empName;private int leaveDays;private String reason;public String getEmpName() {return empName;}public void setEmpName(String empName) {this.empName = empName;}public int getLeaveDays() {return leaveDays;}public void setLeaveDays(int leaveDays) {this.leaveDays = leaveDays;}public String getReason() {return reason;}public void setReason(String reason) {this.reason = reason;}public LeaveRequest(String empName, int leaveDays, String reason) {super();this.empName = empName;this.leaveDays = leaveDays;this.reason = reason;}public LeaveRequest() {super();}}


package ChainOfResponsibility;/*** * 抽象类  */public abstract class Leader {protected String name;protected Leader nextLeader;//责任链上的后继对象public Leader(String name) {super();this.name = name;}//设定责任链上的后继对象public void setNextLeader(Leader nextLeader) {this.nextLeader = nextLeader;}/*** * 处理请求的核心业务方法  * @param request */public abstract void handleRequest(LeaveRequest request);}




package ChainOfResponsibility;/*** * 主任 * @author zw * */public class Director extends Leader{public Director(String name) {super(name);// TODO Auto-generated constructor stub}@Overridepublic void handleRequest(LeaveRequest request) {if(request.getLeaveDays()<3) {System.out.println("员工:"+request.getEmpName()+",请假:"+request.getLeaveDays()+"天,理由是:"+request.getReason());System.out.println("主任:"+this.name+",审批通过!");}else {if(this.nextLeader!=null) {//下一个不为空,就交给下一个处理this.nextLeader.handleRequest(request);}}}}

package ChainOfResponsibility;/*** * 经理 * @author zw * */public class Manager extends Leader{public Manager(String name) {super(name);// TODO Auto-generated constructor stub}@Overridepublic void handleRequest(LeaveRequest request) {if(request.getLeaveDays()<10) {System.out.println("员工:"+request.getEmpName()+",请假:"+request.getLeaveDays()+"天,理由是:"+request.getReason());System.out.println("经理:"+this.name+",审批通过!");}else {if(this.nextLeader!=null) {//下一个不为空,就交给下一个处理this.nextLeader.handleRequest(request);}}}}

package ChainOfResponsibility;/*** * 总经理 * @author zw * */public class GeneralManager extends Leader{public GeneralManager(String name) {super(name);// TODO Auto-generated constructor stub}@Overridepublic void handleRequest(LeaveRequest request) {if(request.getLeaveDays()<30) {System.out.println("员工:"+request.getEmpName()+",请假:"+request.getLeaveDays()+"天,理由是:"+request.getReason());System.out.println("总经理:"+this.name+",审批通过!");}else {System.out.println("大于三十天不通过,该员工有异常表现!");}}}


package ChainOfResponsibility;public class Client {public static void main(String[] args) {Leader a = new Director("张三");Leader b = new Manager("李四");Leader c = new GeneralManager("王五");//设置责任链的下一个对象a.setNextLeader(b);b.setNextLeader(c);//请假操作LeaveRequest r1 = new LeaveRequest("张华", 50, "回老家探亲!");a.handleRequest(r1);}}