设计模式代码实战-责任链模式

1、问题描述

小明所在的公司请假需要在OA系统上发布申请,整个请求流程包括多个处理者,每个处理者负责处理不同范围的请假天数,如果一个处理者不能处理请求,就会将请求传递给下一个处理者,请你实现责任链模式,可以根据请求天数找到对应的处理者。

审批责任链由主管(Supervisor), 经理(Manager)和董事(Director)组成,他们分别能够处理3天、7天和10天的请假天数。如果超过10天,则进行否决。

输入示例

4

Alice 2

Bob 5

Tom 10

Jerry 12

输出示例

Alice Approved by Supervisor.

Bob Approved by Manager.

Tom Approved by Director.

Jerry Denied by Director.

2、责任链模式

其实就是单链表数据结构,一个个递归向后处理,当前节点能处理就返回

3、代码

java 复制代码
import com.sun.java.accessibility.util.TopLevelWindowListener;

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        Supervisor s=new Supervisor();

        Manager m=new Manager();

        Director d=new Director();

        s.setNext(m);
        m.setNext(d);
        int number=Integer.parseInt(sc.nextLine());
        for(int i=0;i<number;i++){
            String input=sc.nextLine();
            String[] ss=input.split(" ");
            String username=ss[0];
            int day=Integer.parseInt(ss[1]);
            s.handleRequest(username,day);
        }



    }
}

interface Handler{
    void setNext(Handler next);
    Handler getNext();
    void handleRequest(String username,int time);
    boolean canHandleRequest(int time);
}

class Supervisor implements Handler{
    private  Handler next;
    @Override
    public void setNext(Handler next) {
        this.next=next;
    }

    @Override
    public Handler getNext() {
        return this.next;
    }

    @Override
    public void handleRequest(String username,int time) {
        if(canHandleRequest(time)){
            System.out.println(username+" Approved by Supervisor.");
        }else {
            Handler next=getNext();
            next.handleRequest(username,time);
        }
    }

    @Override
    public boolean canHandleRequest(int time) {
        if(time>3){
            return false;
        }
        return true;
    }
}

class Manager implements Handler{
    private  Handler next;
    @Override
    public void setNext(Handler next) {
        this.next=next;
    }

    @Override
    public Handler getNext() {
        return this.next;
    }

    @Override
    public void handleRequest(String username, int time) {
        if(canHandleRequest(time)){
            System.out.println(username+" Approved by Manager.");
        }else {
            Handler next=getNext();
            next.handleRequest(username,time);
        }
    }

    @Override
    public boolean canHandleRequest(int time) {
        if(time>5){
            return false;
        }
        return true;
    }
}


class Director implements Handler{
    private  Handler next;
    @Override
    public void setNext(Handler next) {
        this.next=next;
    }

    @Override
    public Handler getNext() {
        return this.next;
    }

    @Override
    public void handleRequest(String username, int time) {
        if(canHandleRequest(time)){
            System.out.println(username+" Approved by Director.");
        }else {
            System.out.println(username+" Denied by Director.");
        }
    }

    @Override
    public boolean canHandleRequest(int time) {
        if(time>10){
            return false;
        }
        return true;
    }
}
相关推荐
leikooo6 小时前
用餐厅和盘子理解栈和堆
java·数据结构·链表·rust
Ivanqhz8 小时前
激活函数在 Transformer 中的作用及各种变体简述
java·linux·数据库·人工智能·深度学习
沙漠之主8 小时前
C++编程教学设计资料:从入门到实战的完整课程方案
java·前端·c++
FPGA小徐8 小时前
PA1 基础设施(2)深度解析:NEMU 中 ITRACE、MTRACE、FTRACE、IRINGBUF、ETRACE、DIFFTEST 全解析
java·服务器·网络
YOLO数据集集合9 小时前
EvoAgent:面向PR研发治理的自进化Multi-Agent Harness系统
java·开发语言·目标检测·agent·自进化
知行EDI9 小时前
知行之桥 MaBang 端口使用指南——Create Order 订单创建篇
java·服务器·数据库
笑鸿的学习笔记9 小时前
C++笔记之大块顺序写
java·c++·笔记
打工仔折腾 AI9 小时前
从 Demo 到生产级 Agent:8 个关键设计机制与 Python 实现拆解
java·jvm·人工智能·后端·python·langchain·ai agent 实战
殷色玫瑰10 小时前
C/C++ 内存管理详解:从内存分布到 new/delete 底层原理
java·linux·c语言·c++
青山木12 小时前
Hot 100 --- 编辑距离
java·数据结构·算法·leetcode·动态规划