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

    运行结果:

     

  • 相关阅读:
    hibernate.cfg.xml
    java util 巧用
    Ant
    WEB文件上传二 (Struts 文件上传)
    web文件上传一学习记录 (简单的web浏览器可读文件的上传,servlet 文件上传)
    long类型的时间转为n秒前n分钟前n小时前或者日期
    各种String类型的时间转long型,long转String
    Android 内容提供者(ContentProvider)的简单实用
    sql性能优化总结(转)
    数据添加到DataTable
  • 原文地址:https://www.cnblogs.com/ywbmaster/p/9803005.html
Copyright © 2011-2022 走看看