zoukankan      html  css  js  c++  java
  • 责任链设计模式

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

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

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

      抽象处理者定义了一个处理者需要具备的两个重要属性: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);
        }
    }
  • 相关阅读:
    Qt支持中文显示
    C/C++ 知识点---LIB和DLL的区别与使用(网摘)
    Inno Setup
    C/C++ 知识点---字符串函数
    es5 JSON对象
    Es567严格模式
    mysql常用命令
    promise 获取文件内容
    postman连接不了localhost问题解决
    node---处理post请求
  • 原文地址:https://www.cnblogs.com/AshOfTime/p/10832880.html
Copyright © 2011-2022 走看看