责任链设计模式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.结果展示

 

转载于:https://www.cnblogs.com/WhiperHong/p/11502406.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的责任模式的示例代码: ```python from abc import ABC, abstractmethod class Handler(ABC): """ 定义处理请求的抽象处理器 """ def __init__(self, successor=None): self._successor = successor @abstractmethod def handle_request(self, request): pass class ConcreteHandler1(Handler): """ 具体处理器1 """ def handle_request(self, request): if request == 'request1': print('ConcreteHandler1 处理了请求:', request) else: if self._successor is not None: self._successor.handle_request(request) class ConcreteHandler2(Handler): """ 具体处理器2 """ def handle_request(self, request): if request == 'request2': print('ConcreteHandler2 处理了请求:', request) else: if self._successor is not None: self._successor.handle_request(request) if __name__ == '__main__': """ 客户端代码 """ handler1 = ConcreteHandler1() handler2 = ConcreteHandler2(handler1) handler2.handle_request('request1') handler2.handle_request('request2') handler2.handle_request('request3') ``` 在这个示例中,定义了一个抽象处理器 `Handler`,包含一个处理请求的抽象方法 `handle_request()`,并且定义了一个具体处理器 `ConcreteHandler1` 和 `ConcreteHandler2`,它们分别实现了 `handle_request()` 方法来处理不同类型的请求。 在具体处理器中,如果能够处理该类型的请求,就直接处理;否则,就将请求传递给下一个处理器,直到找到能够处理该请求的处理器为止。 客户端代码中,首先创建了两个具体处理器 `handler1` 和 `handler2`,然后将 `handler1` 设置为 `handler2` 的后继处理器。最后,客户端代码调用 `handler2` 的 `handle_request()` 方法,传递不同类型的请求,观察哪个处理器能够处理该请求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值