zoukankan      html  css  js  c++  java
  • 【设计模式】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天的请假在总经理处被批准
  • 相关阅读:
    install ros-indigo-tf2
    install ros-indigo-tf
    install diagnostic_updater
    install ros-indigo-ecl-build
    "CMAKE_CXX_COMPILER-NOTFOUND"
    shell 交互式选择(select)
    install ros indigo tf2
    a标签 在新页面打开
    bootstrap.min.css.map HTTP/1.1" 404 1699
    E: Sub-process /usr/bin/dpkg returned an error code (1)
  • 原文地址:https://www.cnblogs.com/jiazhongxin/p/12886901.html
Copyright © 2011-2022 走看看