1. // 管理者
    2. public abstract class Manager {
    3. protected String name;
    4. // 管理者的上级
    5. protected Manager superior;
    6. public Manager(String name){
    7. this.name=name;
    8. }
    9. // 设置管理者的上级
    10. public void SetSuperior(Manager superior){
    11. this.superior=superior;
    12. }
    13. // 申请请求
    14. abstract public void RequestApplications(Request request);
    15. }
    16. // 经理
    17. public class CommonManger extends Manager {
    18. public CommonManger(String name) {
    19. super(name);
    20. }
    21. @Override
    22. public void RequestApplications(Request request) {
    23. if(request.requestType=="请假" && request.number<=5){
    24. System.out.println(this.name+":"+request.requestContent+request.number+",请批准");
    25. }else{
    26. // 转移上级
    27. if(superior!=null){
    28. superior.RequestApplications(request);
    29. }
    30. }
    31. }
    32. }
    33. // 总经理
    34. public class GeneralManager extends Manager {
    35. public GeneralManager(String name) {
    36. super(name);
    37. }
    38. @Override
    39. public void RequestApplications(Request request) {
    40. if(request.requestType=="请假" && request.number<=20){
    41. System.out.println(this.name+":"+request.requestContent+request.number+",请批准");
    42. }else{
    43. // 转移上级
    44. if(superior!=null){
    45. superior.RequestApplications(request);
    46. }
    47. }
    48. }
    49. }
    50. // 总监
    51. public class Majordomo extends Manager {
    52. public Majordomo(String name) {
    53. super(name);
    54. }
    55. @Override
    56. public void RequestApplications(Request request) {
    57. if(request.requestType=="请假" && request.number<=10){
    58. System.out.println(this.name+":"+request.requestContent+request.number+",请批准");
    59. }else{
    60. // 转移上级
    61. if(superior!=null){
    62. superior.RequestApplications(request);
    63. }
    64. }
    65. }
    66. }
    67. // 请求
    68. public class Request {
    69. // 请假类型
    70. public String requestType;
    71. // 请假内容
    72. public String requestContent;
    73. // 天数
    74. public int number;
    75. }
    76. public class Test {
    77. public static void main(String[] args) {
    78. CommonManger jinli =new CommonManger("经理");
    79. Majordomo zongjian =new Majordomo("总经理");
    80. GeneralManager zhogjian =new GeneralManager("总监");
    81. jinli.SetSuperior(zongjian);
    82. zongjian.SetSuperior(zhogjian);
    83. Request request =new Request();
    84. request.requestType="请假";
    85. request.requestContent="小菜请假";
    86. // 天数1
    87. request.number=1;
    88. jinli.RequestApplications(request);
    89. // 天数10
    90. Request request1 =new Request();
    91. request1.requestType="请假";
    92. request1.requestContent="小菜请假";
    93. request1.number=10;
    94. jinli.RequestApplications(request1);
    95. // 天数15
    96. Request request2 =new Request();
    97. request2.requestType="请假";
    98. request2.requestContent="小菜请假";
    99. request2.number=15;
    100. jinli.RequestApplications(request2);
    101. }
    102. }