• 责任链设计模式


    定义:多个对象都有机会处理请求,避免请求的处理者和请求的发送者耦合。当一个请求到来的时候,遍历责任链,找到第一个能够处理该请求的处理者。

    优点:避免请求者和处理者耦合;方便的增加或减少处理者。

    角色:请求者 抽象处理者 具体处理者

      抽象处理者定义了一个处理者需要具备的两个重要属性:1、什么条件下一个处理者能够处理请求 2、如果该处理者无法处理请求,应该把请求转发给哪一个处理者

    package ChainOfResponsibility;
    
    public abstract class Handler {
        private Handler nextHandler;
        private int maxDay;
    
        public void handlerRequest(int day){
            if (day<=maxDay){
                reply(day);
            }else {
                if (nextHandler!=null){
                    nextHandler.handlerRequest(day);
                }else {
                    System.out.println("没有更高的权限了");
                }
            }
        }
    
        public abstract void reply(int day);
    
        public Handler getNextHandler() {
            return nextHandler;
        }
    
        public void setNextHandler(Handler nextHandler) {
            this.nextHandler = nextHandler;
        }
    
        public int getMaxDay() {
            return maxDay;
        }
    
        public void setMaxDay(int maxDay) {
            this.maxDay = maxDay;
        }
    }

      不同的具体处理者继承抽象处理者

    package ChainOfResponsibility;
    
    public class BigManager extends Handler
    {
        @Override
        public void reply(int day) {
            System.out.println("我是总经理,我批了 "+day);
        }
    }
    package ChainOfResponsibility;
    
    public class DepartManager extends Handler  {
        @Override
        public void reply(int day) {
            System.out.println("我的部门经理 我批了 "+day);
        }
    }
    package ChainOfResponsibility;
    
    public class ProjectManager extends Handler {
        @Override
        public void reply(int day) {
            System.out.println("我是项目经理 我批了 "+day);
        }
    }

      在测试方法中,需要把多个具体处理者连接成一个链,连接成链的关键是为每一个处理者添加后继

    package ChainOfResponsibility;
    
    public class test {
        public static void main(String[] args) {
            BigManager bigManager = new BigManager();
            bigManager.setMaxDay(10);
            DepartManager departManager = new DepartManager();
            departManager.setMaxDay(5);
            ProjectManager projectManager = new ProjectManager();
            projectManager.setMaxDay(3);
    
            projectManager.setNextHandler(departManager);
            departManager.setNextHandler(bigManager);
            bigManager.setNextHandler(null);
    
            projectManager.handlerRequest(2);
            projectManager.handlerRequest(4);
            projectManager.handlerRequest(9);
            projectManager.handlerRequest(90);
        }
    }
  • 相关阅读:
    go.js:画布内容导出为图片
    go.js:拖拽创建流程图
    vue+go.js:实现流程图
    前端:go.js去水印
    screenfull错误
    VUE:axios接收后端文件流并下载文件
    CSS:unset 属性
    上传文件小工具
    个人技能总结2--MyBaties框架
    个人技能总结1:Shiro框架
  • 原文地址:https://www.cnblogs.com/AshOfTime/p/10832880.html
Copyright © 2020-2023  润新知