• JAVA中的责任链模式(CH01)



    责任链模式的关键在于每一个任务处理者都必须持有下一个任务处理者的作用

    纯的责任链:纯的责任链是只能也必须只有一个任务处理者去处理这个任务,

              不会出现没有处理者处理的情况,也不会出现有多个处理者处理同一个任务

    不纯的责任链:可以有多个任务处理者同时处理一个任务,那么就表示这个任务是大家一起共享的,或者也可以没有任何处理这去处理他

    责任链:

    这是一个简单的经费申请责任链。

    客户端发请求申请经费,

    申请经费从最小权限范围开始申请,如果权限不足则向上一级申请。

    1:定义一个抽象类(AbstractHandler),抽象申请经费方法.

    2:定义三个子类,继承 AbstractHandler 父类,实现抽象方法 execute(int money);

    1:这个抽象定义自己本身,然后赋予get&set方法;

    public abstract class AbstractHandler {
        
        //定义自己,给get&set方法
        private AbstractHandler handler;
    
        public AbstractHandler getHandler() {
            return handler;
        }
    
        public void setHandler(AbstractHandler handler) {
            this.handler = handler;
        }
    
        //抽象申请经费方法
        public abstract void execute(int money);
    }
    

    2:第一个子类,申请经费范围在小于或定于200内,

         做出判断,如果不在范围内,从新调用execute方法,

         此时的execute是下一级审批官的方法了在后面客户端main方法里面可以设置

    a) money<=200

    public class HandlerA extends AbstractHandler {
    
        @Override
        public void execute(int money) {
            if(money<=200){
                System.out.println("A审核通过…………");
            }else{
                getHandler().execute(money);
            }
        }
    }
    

     b) money<=500

    public class HandlerB extends AbstractHandler {
        @Override
        public void execute(int money) {
            if(money<=500){
                System.out.println("B审核可以通过…………");
            }else{
                getHandler().execute(money);
            }
        }
    }
    

     c) money<=1000

         此时为最高一级

    public class HandlerC extends AbstractHandler {
        @Override
        public void execute(int money) {
            if(money<=1000){
                System.out.println("C审核通过…………");
            }else{
                System.out.println("审超出预算");
            }
        }
    }
    

      

      客户端

    public class Main {
        public static void main(String[] args) {
          //实现三个不同级别权限的子类
            AbstractHandler A = new HandlerA();
            AbstractHandler B = new HandlerB();
            AbstractHandler C = new HandlerC();
         //给子类赋予下一个对应的级别 A.setHandler(B); B.setHandler(C); A.execute(300); } }

     输出结果为:A审核通过…………

    后记:虽然发现很容易就完成了责任链,但是发现代码并不如意,耦合太高,后续一篇会对此进行优化

  • 相关阅读:
    manjaro开机出现grub 解决办法
    goquery 解析不了noscript
    同步服务器时间
    phpStorm中使用xdebug工具调试docker容器中的程序
    Goutte 获取http response
    在微信浏览器里使用js或jquery实现页面重新刷新
    Node Sass does not yet support your current environment
    微信支付服务商模式
    PHP获取月末时间
    JavaScript DOM 对象
  • 原文地址:https://www.cnblogs.com/javaLin/p/7883494.html
Copyright © 2020-2023  润新知