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天的请假在总经理处被批准
  • 相关阅读:
    Python全栈之路Day19
    Python全栈之路Day20
    Python全栈之路Day21
    子元素应该margin-top为何会影响父元素【转】
    HTML5的效果网站demo
    用CSS让字体在一行内显示不换行
    jQuery获得页面元素的绝对/相对位置
    DIV垂直/水平居中2(DIV宽度和高度是动态的)
    Jquery常用方法
    关于JS正则表达式
  • 原文地址:https://www.cnblogs.com/jiazhongxin/p/12886901.html
Copyright © 2011-2022 走看看