责任链设计模式Demo

  实现功能:请假审批流程,请假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.结果展示

猜你喜欢

转载自www.cnblogs.com/WhiperHong/p/11502406.html