• 【设计模式】15.职责链模式


    职责链模式

      职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。

    结构图:

    例:

    public abstract class Manager {        // Handler(管理者)
        protected Manager superior;        // 上级(Successor)
    
        public void setSuperior(Manager superior) {
            this.superior = superior;
        }
    
        abstract public void handleRequest(String request,int days);
    
    }
    public class CommonManager extends Manager {         // ConcreteHandler(经理)
        @Override
        public void handleRequest(String request,int days) {
            if(request.equals("请假") && days<=3){           // 3天以内的请假经理可以批准
                System.out.println(days+"天的请假在经理处被批准");
            }else if(request.equals("请假") && days>3 && days<=7 ){ // 4-7天的请假需上级总经理批准
                superior.handleRequest(request,days);
            }
        }
    }
    public class GeneralManager extends Manager {        // ConcreteHandler(总经理)
        @Override
        public void handleRequest(String request, int days) {
            if(request.equals("请假") && days<7){           // 4-7天以内的请假总经理可以批准
                System.out.println(days+"天的请假在总经理处被批准");
            }else if(request.equals("请假") && days>7){    // 超过7天的不批准(职责链到此结束)
                System.out.println(days+"天的请假不可以批准");
            }
        }
    }
    public class Test {
        public static void main(String[] args) {
            CommonManager commonManager = new CommonManager();     // 经理
            GeneralManager generalManager = new GeneralManager();  // 总经理
            commonManager.setSuperior(generalManager);             // 设置上级
    
            commonManager.handleRequest("请假",3);   // 向经理请假
            commonManager.handleRequest("请假",5);   // 向经理请假
        }
    }

    输出:

    3天的请假在经理处被批准
    5天的请假在总经理处被批准
  • 相关阅读:
    MVCC浅析
    brew 安装的.net 运行时提示"Did you mean to run dotnet SDK commands?"
    PyCharm for Mac 调整字体大小
    PowerShell 解决红字一闪而过问题
    Shell 环境变量也是变量
    软件选择的起点:目的与需求
    macOS 不用任何第三方工具 简单两步使用 Automator 将截图转成@1x
    Mac 查看 剪贴板/剪切板/粘贴板 内容与格式
    Docker 网络相关 (系统学习Docker04)
    Docker 的镜像和容器(系统学习Docker03)
  • 原文地址:https://www.cnblogs.com/jiazhongxin/p/12886901.html
Copyright © 2020-2023  润新知