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"));
        }
    }

    运行结果:

     

  • 相关阅读:
    【软件工程】 第1次团队作业
    Daily scrum 2015.10.19
    Buaaclubs的NABC与发布
    团队作业2
    团队介绍——窝窝头
    [Alpha阶段]第四次Scrum Meeting
    [Alpha阶段]第三次Scrum Meeting
    [Alpha阶段]第二次Scrum Meeting
    [Alpha阶段]第一次Scrum Meeting
    团队贡献分分配规则
  • 原文地址:https://www.cnblogs.com/ywbmaster/p/9803005.html
Copyright © 2011-2022 走看看