// 管理者public abstract class Manager { protected String name; // 管理者的上级 protected Manager superior; public Manager(String name){ this.name=name; } // 设置管理者的上级 public void SetSuperior(Manager superior){ this.superior=superior; } // 申请请求 abstract public void RequestApplications(Request request);}// 经理public class CommonManger extends Manager { public CommonManger(String name) { super(name); } @Override public void RequestApplications(Request request) { if(request.requestType=="请假" && request.number<=5){ System.out.println(this.name+":"+request.requestContent+request.number+",请批准"); }else{// 转移上级 if(superior!=null){ superior.RequestApplications(request); } } }}// 总经理public class GeneralManager extends Manager { public GeneralManager(String name) { super(name); } @Override public void RequestApplications(Request request) { if(request.requestType=="请假" && request.number<=20){ System.out.println(this.name+":"+request.requestContent+request.number+",请批准"); }else{// 转移上级 if(superior!=null){ superior.RequestApplications(request); } } }}// 总监public class Majordomo extends Manager { public Majordomo(String name) { super(name); } @Override public void RequestApplications(Request request) { if(request.requestType=="请假" && request.number<=10){ System.out.println(this.name+":"+request.requestContent+request.number+",请批准"); }else{// 转移上级 if(superior!=null){ superior.RequestApplications(request); } } }}// 请求public class Request {// 请假类型 public String requestType;// 请假内容 public String requestContent;// 天数 public int number;}public class Test { public static void main(String[] args) { CommonManger jinli =new CommonManger("经理"); Majordomo zongjian =new Majordomo("总经理"); GeneralManager zhogjian =new GeneralManager("总监"); jinli.SetSuperior(zongjian); zongjian.SetSuperior(zhogjian); Request request =new Request(); request.requestType="请假"; request.requestContent="小菜请假"; // 天数1 request.number=1; jinli.RequestApplications(request); // 天数10 Request request1 =new Request(); request1.requestType="请假"; request1.requestContent="小菜请假"; request1.number=10; jinli.RequestApplications(request1); // 天数15 Request request2 =new Request(); request2.requestType="请假"; request2.requestContent="小菜请假"; request2.number=15; jinli.RequestApplications(request2); }}