zoukankan      html  css  js  c++  java
  • 责任链简单解析

    责任链

    责任链又叫做职责链,是属于行为型设计模式,它的初衷是为了解决一个事件需要经过多个对象处理是很常见的场景。
    

      

    一个例子

    说责任链之前,先引入一个场景,假如规定学生请假小于或等于 2 天,班主任可以批准;小于或等于 7 天,系主任可以批准;小于或等于 10 天,院长可以批准;其他情况不予批准;以此为需求,写一个程序,你会怎么做?按着过程思维方式,最快最直白的就是,if else嘛,配合java,无非多追加学生类和各个角色的类。下面介绍的设计模式或许会给我们一些启发。

    public class ResponseChain {
    
    
        public static void main(String[] args) {
            leader headMaster = new HeadMaster();
            leader classHeader = new classHeader();
            leader dean = new dean();
            headMaster.setNext(classHeader);
            classHeader.setNext(dean);
            headMaster.handlerRequest(2);
            headMaster.handlerRequest(6);
            headMaster.handlerRequest(8);
        }
    
        static abstract class leader{
            private leader next;
    
            public leader getNext() {
                return next;
            }
    
            public void setNext(leader next) {
                this.next = next;
            }
    
            public abstract  void handlerRequest(int days);
        }
    
        static class HeadMaster extends leader{
    
            @Override
            public void handlerRequest(int days) {
                if(days <= 2){
                    System.out.println("班主任审批通过,请假+" + days);
                }else {
                    if(this.getNext() != null){
                        this.getNext().handlerRequest(days);
                    }
                    else {
                        System.out.println("请假天数过多,班主任无法审批");
                    }
                }
            }
        }
    
        static class classHeader extends leader{
    
            @Override
            public void handlerRequest(int days) {
                if(days <= 7){
                    System.out.println("系主任审批通过,请假+" + days);
                }else {
                    if(this.getNext() != null){
                        this.getNext().handlerRequest(days);
                    }
                    else {
                        System.out.println("请假天数过多,系主任无法审批");
                    }
                }
            }
        }
    
        static class dean extends leader{
    
            @Override
            public void handlerRequest(int days) {
                if(days <= 10){
                    System.out.println("院长审批通过,请假+" + days);
                }else {
                    if(this.getNext() != null){
                        this.getNext().handlerRequest(days);
                    }
                    else {
                        System.out.println("请假天数过多,院长无法审批");
                    }
                }
            }
        }
    }
    

      

  • 相关阅读:
    坦克大战(完结篇)
    坦克大战第一节——画出自己的坦克(新手篇)
    jq动画插件,自制基于vue的圆形时钟
    原生js数值开根算法
    html引入公共模块
    js组件
    前端不缓存,ajax不缓存,js操作cookie
    c++打印实心菱形,空心三角形,十字星,空心正方形,实心平行四边形
    css元素水平垂直居中
    vue日历/日程提醒/html5本地缓存
  • 原文地址:https://www.cnblogs.com/zhangchiblog/p/14177356.html
Copyright © 2011-2022 走看看