ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

责任链模式

2020-09-24 10:00:48  阅读:279  来源: 互联网

标签:leave Process startDay 模式 责任 nextProcess void public


责任链模式

责任链模式是一种处理请求的模式,它让多个处理器都有机会处理该请求,直到其中某个处理成功为止,责任链模式把多个处理器串成链,然后让请求在链上传递。

案例

一个请假条,如果只是1-3条,是由组长来审批;
如果是4-10天,由经理来处理;
如果是10天以上,由老板来处理

代码

/**
 * 请假处理人抽象类
 */
public abstract class Process {

    private Process nextProcess;

    private Integer startDay;


    private Integer endDay;

    /**
     * 构造函数确定责任范围
     * @param startDay
     * @param endDay
     */
    public Process(Integer startDay, Integer endDay) {
        this.startDay = startDay;
        this.endDay = endDay;
    }

    public Process getNextProcess() {
        return nextProcess;
    }

    /**
     * 设置责任链
     *
     * @param nextProcess
     */
    public void setNextProcess(Process nextProcess) {
        this.nextProcess = nextProcess;
    }

    /**
     * 精髓
     * 采用类似于链表的方式,通过递归,知道找到相应的角色
     *
     * @param leave
     */
    public final void submit(Leave leave) {

        Integer day = leave.getDay();
        if (day <= endDay && day >= startDay) {
            handle();
        } else if (nextProcess != null) {
            nextProcess.submit(leave);
        } else {
            System.out.println("无人处理");
        }
    }

    /**
     * 由子类来实现
     */
    public abstract void handle();
}

组长

public class GroupLeader extends Process {
    public GroupLeader() {
        super(1, 3);
    }

    @Override
    public void handle() {
        System.out.println("小组长");
    }
}

client

public class Client {
    public static void main(String[] args) {
        //创建角色
        Process boss = new Boss();
        Process groupLeader = new GroupLeader();
        Process manager = new Manager();

        //确定责任链
        groupLeader.setNextProcess(manager);
        manager.setNextProcess(boss);

        Leave leave = new Leave(9, "xxx");
        groupLeader.submit(leave);

    }
}

参考

https://www.cnblogs.com/fengyumeng/p/10839570.html

标签:leave,Process,startDay,模式,责任,nextProcess,void,public
来源: https://www.cnblogs.com/lexiaoyao1995/p/13722639.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有