zoukankan      html  css  js  c++  java
  • 设计模式—责任链模式

    责任链模式在请求对象不清楚处理对象是谁的情况下使用该模式。

       请求对象把请求提交给处理对象,所有的处理对象依次进行判断,如果是自己的处理范围则进行处理,结束请求向后传递,如果不属于自己的处理范围则向下传递请求直到请求被处理。

      注意区分责任链模式和装饰模式的区别:责任链是对请求对象的处理过滤;装饰模式是对被装饰对象的自由功能扩展。

    实例说明:员工请假,5天以内组长有权批准,5~10天ceo有权批准,10~20天董事长有权批准。

    定义管理者接口:Manager

      public abstract void dealRequest(int request);为处理请假的方法

    package com.zpj.designMode.chainOfResponsibility;
    
    public abstract class Manager {
        protected Manager leader;
    
        // 处理方法
        public abstract void dealRequest(int request);
    
        public Manager(Manager leader) {
            super();
            this.leader = leader;
        }
    
    }

    添加三个管理者:

    package com.zpj.designMode.chainOfResponsibility;
    
    public class Chairman extends Manager {
    
        public Chairman(Manager leader) {
            super(leader);
        }
    
        @Override
        public void dealRequest(int request) {
            //有权对>20天的请假进行处理
            if (request <= 20) {
                System.out.println("Chairman--------允许----------");
            } else {
                System.out.println("Chairman--------拒绝----------");
            }
    
        }
    
    }
    
    
    package com.zpj.designMode.chainOfResponsibility;
    
    public class ChiefExecutiveOfficer extends Manager {
    
        public ChiefExecutiveOfficer(Manager leader) {
            super(leader);
        }
    
        @Override
        public void dealRequest(int request) {
            //有权对>10天的请假进行处理
            if (request <= 10) {
                System.out.println("ChiefExecutiveOfficer--------允许----------");
            } else {
                leader.dealRequest(request);
            }
    
        }
    
    }
    
    package com.zpj.designMode.chainOfResponsibility;
    
    public class GroupLeader extends Manager {
    
        public GroupLeader(Manager leader) {
            super(leader);
        }
    
        @Override
        public void dealRequest(int request) {
            //有权对>5天的请假进行处理
            if (request <= 5) {
                System.out.println("GroupLeader--------允许----------");
            } else {
                leader.dealRequest(request);
            }
        }
    
    }

    使用示例:

    package com.zpj.designMode.chainOfResponsibility;
    
    import org.junit.Test;
    
    public class testUnit {
    
        @Test
        public void test01() {
            Manager chairman = new Chairman(null);
            Manager ceo = new ChiefExecutiveOfficer(chairman);
            Manager groupLeader = new GroupLeader(ceo);
            //向组长发起请假申请
            groupLeader.dealRequest(26);
    
        }
    
    }

    处理者一层一层的对请求进行过滤,直至被处理或者过滤结束

    ---------------------------

  • 相关阅读:
    [转载]解决zabbix在configure时候遇到的问题(Ubuntu)
    [转载]ubuntu的版本
    [转载]Nginx如何处理一个请求
    微信小程序—文件系统
    javascript 中 x offsetX clientX screenX pageX的区别
    Bootstrap 框架、插件
    HTML自定义滚动条(仿网易邮箱滚动条)转载
    Vue 组件(上)转载
    vue $mount 和 el的区别
    $on在构造器外部添加事件$once执行一次的事件$off关闭事件
  • 原文地址:https://www.cnblogs.com/PerkinsZhu/p/5843157.html
Copyright © 2011-2022 走看看