请假信息类:
package chain_of_responsibility_mode; /** * 封装请假的基本信息类 */ public class LeaveInfo { private String empName; private int leaveDays; private String reason; public LeaveInfo(String empName, int leaveDays, String reason) { this.empName = empName; this.leaveDays = leaveDays; this.reason = 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; } }
领导抽象类:
package chain_of_responsibility_mode; /** * 领导抽象类 */ public abstract class Leader { protected String name;//姓名 protected Leader nextLeader;//责任链上的后继对象 public Leader(String name){ this.name = name; } /** * 设置责任链上的后继对象 */ public void setNextLeader(Leader nextLeader) { this.nextLeader = nextLeader; } /** * 处理业务的核心方法 */ public abstract void handleLeave(LeaveInfo leaveInfo); }
主任类:
package chain_of_responsibility_mode; /** * 主任类 */ public class Director extends Leader{ /** * 初始化父类(传入姓名) */ public Director(String name) { super(name); } /** * 处理业务的核心方法, 对请假信息进行处理 */ @Override public void handleLeave(LeaveInfo 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.handleLeave(request); } } } }
经理类:
package chain_of_responsibility_mode; /** * 经理类 */ public class Manager extends Leader{ /** * 初始化父类(传入姓名) */ public Manager(String name) { super(name); } /** * 处理业务的核心方法, 对请假信息进行处理 */ @Override public void handleLeave(LeaveInfo 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.handleLeave(request); } } } }
副总经理类:
package chain_of_responsibility_mode; /** * 副总经理类 */ public class ViceGeneralManager extends Leader{ /** * 初始化父类(传入姓名) */ public ViceGeneralManager(String name) { super(name); } /** * 处理业务的核心方法, 对请假信息进行处理 */ @Override public void handleLeave(LeaveInfo request) { if (request.getLeaveDays() < 20) { System.out.println("员工: " + request.getEmpName() + "请假,天数: " + request.getLeaveDays() + ",理由: " + request.getReason()); System.out.println("副总经理: " + this.name + ",审批通过!"); }else { if (this.nextLeader!=null) {//如果有后继对象, 让后继对象继续处理 this.nextLeader.handleLeave(request); } } } }
总经理类:
package chain_of_responsibility_mode; /** * 总经理类 */ public class GeneralManager extends Leader{ /** * 初始化父类(传入姓名) */ public GeneralManager(String name) { super(name); } /** * 处理业务的核心方法, 对请假信息进行处理 */ @Override public void handleLeave(LeaveInfo request) { if (request.getLeaveDays() < 30) { System.out.println("员工: " + request.getEmpName() + "请假,天数: " + request.getLeaveDays() + ",理由: " + request.getReason()); System.out.println("总经理: " + this.name + ",审批通过!"); }else { System.out.println("莫非" + request.getEmpName() + "想辞职,居然请假" + request.getLeaveDays() + "天!"); } } }
测试类:
package chain_of_responsibility_mode; public class Client { public static void main(String[] args) { //主任 Leader director = new Director("张三"); //经理 Leader manager = new Manager("李四"); //副总经理 Leader viceGeneralManager = new ViceGeneralManager("李小四"); //总经理 Leader generalManager = new GeneralManager("王五"); //也可以存到容器里,并进行遍历,一样 //组织责任链对象的关系 director.setNextLeader(manager);//主任的上司: 经理 manager.setNextLeader(viceGeneralManager);//经理的上司: 副总经理 viceGeneralManager.setNextLeader(generalManager);//副总经理的上司: 总经理 //开始请假操作 LeaveInfo leave = new LeaveInfo("Tom", 15, "去美国探亲!"); director.handleLeave(leave);//先由低层开始处理, 可以处理就处理, 请假15天应该由副总经理处理, 看看结果! } }
执行结果:
员工: Tom请假,天数: 15,理由: 去美国探亲!
副总经理: 李小四,审批通过!
谢谢声明出处!
转自: http://www.cnblogs.com/gscq073240/articles/7107043.html