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

        责任链模式:客户端在一个”链条“中处理业务逻辑。

    业务场景就是:客户买东西申请折扣,

      普通销售员:5%

      经理:15%

      CEO:30%和拒接大于30%的折扣

    一个客户来到商店买东西,想要优惠价。他首先向普通销售询问折扣,如果普通销售员不能做主,他将向上级传递。客户并不知道是谁处理了折扣的申请。

    责任链:有两个元素。1)处理业务逻辑,2)下一个链节的对象

    我们来定义一个接口

    package duty;
    
    /**
     * @author ZHONGZHENG664
     * @date 2018/11/29.
     */
    public interface Duty {
    
        int doSomething(int n );
    
        void setNext(Duty next);
    }

    接口的两种实现:单纯针对5和15做平方而已

    package duty;
    
    /**
     * @author ZHONGZHENG664
     * @date 2018/11/29.
     */
    public class DutyImp implements Duty{
        private Duty next;
    
        public int doSomething(int n) {
            if(n==5){
                return n*5;
            }
            if(next!=null){
                return next.doSomething(n);
            }
            return 0;
        }
    
        public void setNext(Duty next) {
            this.next = next;
        }
    }
    View Code
    package duty;
    
    /**
     * @author ZHONGZHENG664
     * @date 2018/11/29.
     */
    public class Manager implements Duty {
        private Duty next;
        public int doSomething(int n) {
            if(n==15){
                return n*15;
            }
            if(next!=null){
                return next.doSomething(n);
            }
            return 0;
        }
    
        public void setNext(Duty next) {
            this.next = next;
        }
    }
    View Code

    测试:首先构建责任链。然后直接调用链头的方法

    package duty;
    
    /**
     * @author ZHONGZHENG664
     * @date 2018/11/29.
     */
    public class DutyTest {
    
        public static void main(String[] agrs){
            Duty manager=new Manager();
            Duty salce=new DutyImp();
            salce.setNext(manager);
            System.out.println(salce.doSomething(5));
            System.out.println(salce.doSomething(15));
            System.out.println(salce.doSomething(10));
        }
    }

    返回结果:

    25
    225
    0

      单纯的访问链头。可以根据链路调用对应的方法。比单纯的if else结构代码封装更好一点。

    责任链的实际应用:  

      在WEB请求中,我们设置的拦截器就是责任链模式的基本应用。

    优缺点:

      优点:屏蔽接口内部调用,对外只提供一个接口。

      缺点:如果链的节点过于长,那么请求的处理过程性能就会变慢。这就是在日常开发中没事别乱添加拦截器。

    学习的时间不一定要特定安排
  • 相关阅读:
    有向图的十字链表存储表示 以及相关操作(包括增加弧、删除弧、删除顶点等)
    数据结构学习笔记—图---图的连通性、顶点间的路径
    解决Vue父路由进入子路由选中样式消失的问题
    解决vue页面刷新,数据丢失
    解决PHP接收不到axios的POST的传参方式
    rem理解及应用【笔记】
    JS基础(学习笔记)
    css中的小技巧
    css中文单行、多行超出省略号和英文换行(学习笔记)
    关于JS(原生js+jq)中获取、设置或者删除元素属性和获取元素值
  • 原文地址:https://www.cnblogs.com/zhongzheng123/p/5732870.html
Copyright © 2011-2022 走看看