首页 > 基础资料 博客日记

java-责任链模式

2023-07-24 15:10:45基础资料围观233

文章java-责任链模式分享给大家,欢迎收藏Java资料网,专注分享技术知识

责任链模式介绍

责任链模式是一种行为型模式。责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求。

 

比如:员工请假3天以下,直属组长就能批。一个星期的假期,需要走到总监这一层批准。半个月的 假期则需要走到总经理这个级别了。请假的情况就非常适合使用责任链模式。事先不知道会由哪层领导批复假期,而各层领导的审批职责就好像铁链一样连接在一起,一个请求沿着这条链一直往上传。

//1.定义一个所有层级请假处理器都需要实现的接口
public interface AskForLeaveHander {
    void setNextHandler(AskForLeaveHander nextHandler);
    boolean handler(int days);
}
public class HeadmanHander implements AskForLeaveHander {

    private AskForLeaveHander nextHandler;

    @Override
    public void setNextHandler(AskForLeaveHander nextHandler) {
        this.nextHandler = nextHandler;
    }

    @Override
    public boolean handler(int days) {
        if (days <= 3){
            System.out.println("组长成功批复了!");
            return true;
        }

        System.out.println(String.format("%d 天假期超出组长权限,请总监批复",days));
        return nextHandler.handler(days);
    }
}
public class ChiefHander implements AskForLeaveHander {

    private AskForLeaveHander nextHandler;

    @Override
    public void setNextHandler(AskForLeaveHander nextHandler) {
        this.nextHandler = nextHandler;
    }

    @Override
    public boolean handler(int days) {
        if (days <= 7){
            System.out.println("总监成功批复了!");
            return true;
        }

        System.out.println(String.format("%d 天假期超出总监权限,请总经理批复", days));
        return nextHandler.handler(days);
    }
}
public class GmHander implements AskForLeaveHander {

    private AskForLeaveHander nextHandler;

    @Override
    public void setNextHandler(AskForLeaveHander nextHandler) {
        this.nextHandler = nextHandler;
    }

    @Override
    public boolean handler(int days) {
        if (days <= 60){
            System.out.println("总经理成功批复了!");
            return true;
        }

        System.out.println("单次最多只能请60天假!");
        return false;
    }
}
    @GetMapping("/askOff")
    public BasicResult<String> askOff(@RequestParam Integer days) {
        HeadmanHander headmanHander = new HeadmanHander();
        ChiefHander chiefHander = new ChiefHander();
        GmHander gmHander =  new GmHander();

        headmanHander.setNextHandler(chiefHander);
        chiefHander.setNextHandler(gmHander);
        if (headmanHander.handler(days)){
            return BasicResult.success("您申请的假期已被批准");
        }else{
            return BasicResult.fail("最近项目太忙了,暂不批假");
        }
    }

启动项目:http://localhost:10001/user/askOff?days=18

 

 

 


文章来源:https://www.cnblogs.com/yinduang/p/16490666.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云