实现功能:请假审批流程,请假3天以内,主任审批;请假3-10天,经理审批;请假10天以上,总经理审批。
1.定义一个请假请求LeaveRequest的类。
1 public class LeaveRequest { 2 private String name;//请假人姓名 3 private int days;//请假天数 4 private String reason;//请假原因 5 6 public LeaveRequest(String name, int days, String reason) { 7 this.name = name; 8 this.days = days; 9 this.reason = reason; 10 } 11 12 public String getName() { 13 return name; 14 } 15 16 public void setName(String name) { 17 this.name = name; 18 } 19 20 public int getDays() { 21 return days; 22 } 23 24 public void setDays(int days) { 25 this.days = days; 26 } 27 28 public String getReason() { 29 return reason; 30 } 31 32 public void setReason(String reason) { 33 this.reason = reason; 34 } 35 }
2.定义一个Leader的抽象类,有一个上级领导的nextLeader属性,还有一个处理请假请求handleRequest()的方法
1 public abstract class Leader { 2 protected String name; 3 protected Leader nextLeader;//责任链后期对象 4 public Leader(){ 5 6 } 7 8 public Leader(String name){ 9 super(); 10 this.name=name; 11 } 12 13 public void setNextLeader(Leader nextLeader) { 14 this.nextLeader = nextLeader; 15 } 16 17 //处理请求核心业务方法 18 public abstract void handleRequest(LeaveRequest leaveRequest); 19 }
3.定义一个Director的子类,重写父类方法,3天以内主任处理,3天以上,交给上级领导
public class Director extends Leader { public Director(String name){ super(name); } @Override public void handleRequest(LeaveRequest leaveRequest) { if (leaveRequest.getDays()<3){ //处理 System.out.println("主任审批通过..."); }else { //处理不了,给下处理 this.nextLeader.handleRequest(leaveRequest); } } }
4.同理,Manager类只处理3-10天的请假。
1 public class Manager extends Leader{ 2 public Manager(String name){ 3 super(name); 4 } 5 @Override 6 public void handleRequest(LeaveRequest leaveRequest) { 7 if (leaveRequest.getDays()>3&&leaveRequest.getDays()<=10){ 8 System.out.println("经理审批成功"); 9 }else { 10 this.nextLeader.handleRequest(leaveRequest); 11 } 12 } 13 }
5.GeneralMmanger类处理10天以上的请假
1 public class GeneralManager extends Leader { 2 public GeneralManager(String name){ 3 super(name); 4 } 5 @Override 6 public void handleRequest(LeaveRequest leaveRequest) { 7 if (leaveRequest.getDays()<30){ 8 System.out.println("总经理审批通过..."); 9 }else { 10 System.out.println(leaveRequest.getName()+":想辞职吧!"); 11 } 12 } 13 }
6.测试类代码
1 public class Main { 2 3 public static void main(String[] args) { 4 Director director = new Director("主任"); 5 Manager manager = new Manager("经理"); 6 GeneralManager generalManager = new GeneralManager("总经理"); 7 director.setNextLeader(manager); 8 manager.setNextLeader(generalManager); 9 LeaveRequest leaveRequest = new LeaveRequest("洪昶", 1, "面试"); 10 director.handleRequest(leaveRequest); 11 } 12 }
7.结果展示