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

    责任链模式定义

    1.1责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。
    发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任

    1.2下面是使用责任链模式定义一个审批金额流程

    代码实例:

    定义一个抽象的AbstractHandler类

    public abstract class AbstractHandler {
    
        private AbstractHandler handler;
    
        public AbstractHandler getHandler() {
            return handler;
        }
    
        public void setHandler(AbstractHandler handler) {
            this.handler = handler;
        }
    
        /**
         * 抽象的业务处理方法
         * @param money 审批金额
         */
        public abstract void execute(BigDecimal money);
    }

    定义三个实现类

    AHandler:

    public class AHandler extends AbstractHandler {
    
        @Override
        public void execute(BigDecimal money) {
            if(money.doubleValue() <= 2000){
                System.out.println("Handler A 执行审批处理");
            } else {
                if(getHandler() != null){
                    getHandler().execute(money);
                }
            }
        }
    }

    BHandler:

    public class BHandler extends AbstractHandler{
    
        @Override
        public void execute(BigDecimal money) {
            if(money.doubleValue() <= 5000){
                System.out.println("Handler B 执行审批处理");
            }else{
                if(getHandler() != null){
                    getHandler().execute(money);
                }
            }
        }
    }

    CHandler:

    public class CHandler extends AbstractHandler{
    
        @Override
        public void execute(BigDecimal money) {
            if(money.doubleValue() <= 10000){
                System.out.println("Handler C 执行审批处理");
            }else{
                if(getHandler() != null){
                    getHandler().execute(money);
                }
            }
        }
    }

    测试方法:

    public class Main {
    
        public static void main(String[] args) {
            //组装责任链
            AbstractHandler handlerA = new AHandler();
            AbstractHandler handlerB = new BHandler();
            AbstractHandler handlerC = new CHandler();
            handlerA.setHandler(handlerB);
            handlerB.setHandler(handlerC);
    
            handlerA.execute(new BigDecimal("4000"));
        }
    }

    运行结果:

     

  • 相关阅读:
    SQL存储过程基础(从基础开始学,加油!)
    SQL语句经典大全
    SQL SQL语句的增删改查
    web app iphone4 iphone5 iphone6 响应式布局 适配代码
    DOM和 jquery 基础
    HTML 和CSS 语言
    python的目标
    老男孩学习DAY11-1 进程、进程池、协程
    老男孩python DAY10 soket 编程
    老男孩全栈PYTHON -DAY8-面向妹子(对象)编程
  • 原文地址:https://www.cnblogs.com/ywbmaster/p/9803005.html
Copyright © 2011-2022 走看看