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("请假天数过多,院长无法审批");
                    }
                }
            }
        }
    }
    

      

  • 相关阅读:
    【转载】10个Web3D可视化精彩案例
    基于react的audio组件
    如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
    CSS3 用border写 空心三角箭头 (两种写法)
    浅谈微信小程序对于创业者,意味着什么?
    左手Cookie“小甜饼”,右手Web Storage
    css3中user-select的用法详解
    个人感觉一些比较有用的特效例子
    纯css模拟电子钟
    蓝桥杯 ALGO-2:最大最小公倍数
  • 原文地址:https://www.cnblogs.com/zhangchiblog/p/14177356.html
Copyright © 2011-2022 走看看