责任链设计模式

java 复制代码
package com.jmj.pattern.responsibility;

/**
 * 请假条类
 */
public class LeaveRequest {
    //姓名
    private String name;
    //请假天数
    private int num;
   //请假内容
    private String content;

    public LeaveRequest(String name, int num, String content) {
        this.name = name;
        this.num = num;
        this.content = content;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}
java 复制代码
package com.jmj.pattern.responsibility;

public abstract class Handler {
    protected final static int NUM_ONE=1;
    protected final static int NUM_THREE=3;
    protected final static int NUM_SEVEN=7;

    //该领导处理的请求天数区间
    private int numStart;
    private int numEnd;


    private Handler nextHandler;

    public Handler(int numStart) {
        this.numStart = numStart;
    }

    public Handler(int numStart, int numEnd) {
        this.numStart = numStart;
        this.numEnd = numEnd;
    }

    public void setNextHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }

    //各级领导处理请假条的方法
    protected abstract void handleLeave(LeaveRequest leave);

    public final void submit(LeaveRequest leave){

        if (this.nextHandler!=null&&leave.getNum()>this.numEnd){
            this.nextHandler.submit(leave);
        }else {
            this.handleLeave(leave);
            System.out.println("流程结束 !");
        }


    }

}
java 复制代码
package com.jmj.pattern.responsibility;

public class GeneralManager extends Handler{
    public GeneralManager(){
        super(Handler.NUM_THREE,Handler.NUM_SEVEN);
    }

    @Override
    protected void handleLeave(LeaveRequest leave) {
        System.out.println(leave.getName()+"请假"+leave.getNum()+"天,"+leave.getContent()+"。");
        System.out.println("总经理审批:同意");
    }
}
java 复制代码
package com.jmj.pattern.responsibility;

public class Manager extends Handler{
    public Manager(){
        super(Handler.NUM_ONE,Handler.NUM_THREE);
    }

    @Override
    protected void handleLeave(LeaveRequest leave) {
        System.out.println(leave.getName()+"请假"+leave.getNum()+"天,"+leave.getContent()+"。");
        System.out.println("部门经理审批:同意");
    }
}
java 复制代码
package com.jmj.pattern.responsibility;

public class GroupLeader extends Handler{
    public GroupLeader(){
        super(0,Handler.NUM_ONE);
    }

    @Override
    protected void handleLeave(LeaveRequest leave) {
        System.out.println(leave.getName()+"请假"+leave.getNum()+"天,"+leave.getContent()+"。");
        System.out.println("小组长审批:同意");
    }
}
java 复制代码
package com.jmj.pattern.responsibility;

public class Client {
    public static void main(String[] args) {
        LeaveRequest leaveRequest = new LeaveRequest("张三", 5, "身体不适");
        GroupLeader groupLeader = new GroupLeader();
        Manager manager = new Manager();
        GeneralManager generalManager = new GeneralManager();
        groupLeader.setNextHandler(manager);

        manager.setNextHandler(generalManager);

        groupLeader.submit(leaveRequest);
    }
}
相关推荐
Seven973 分钟前
dubbo服务暴露源码
java
吴声子夜歌14 分钟前
Java——动态代理
java·开发语言·代理模式
AI人工智能+电脑小能手18 分钟前
【大白话说Java面试题 第59题】【JVM篇】第19题:并发标记过程中会出现什么问题?
java·开发语言·jvm
平行侠18 分钟前
40希尔排序 - 以递减间距进行插入排序
java·算法·排序算法
摇滚侠19 分钟前
Mybatis 面试题 真正的 offer 偏方 Java 基础 Java 高级
java·开发语言·mybatis
代码无bug抓狂人20 分钟前
用回溯算法解决01背包
数据结构·算法
淘矿人21 分钟前
Claude助力前端开发
java·数据库·git·python·sql·spring·database
砍材农夫22 分钟前
物联网 基于netty心跳和ack机制
java·物联网·netty
Odedipus25 分钟前
二叉树的学习笔记
数据结构·笔记·学习
happymaker062629 分钟前
Spring学习日记——DAY07(SpringMVC)
java·学习·spring