zoukankan      html  css  js  c++  java
  • 设计模式学习笔记之责任链模式

    责任链模式
        使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链检查该请求,并对其进行处理,或者将它传递给下一个对象。
        责任链模式有两个角色组成:
        抽象处理者角色:它定义了一个处理请求的接口。当然对于链子的不同实现,也可以在这个角色中实现后继链。
        具体处理者角色:实现抽象处理者定义的接口,并处理它所负责的请求。
     

    下面是《设计模式》中给出的适用范围
        1) 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
        2) 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
        3) 可处理一个请求的对象集合应被动态指定。

     

        责任链模式又有不纯的区别。

        纯的责任链模式,规定一个具体处理者角色只能对请求作出两种动作:自己处理;传给下家。不能出现处理了一部分,把剩下的传给了下家的情况。而且请求在责任链中必须被处理,而不能出现无果而终的结局。反之,则就是不纯的责任链模式。
        在一个纯的责任链模式里面,一个请求必须被某一个处理者对象所接收;在一个不纯的责任链模式里面,一个请求可以最终不被任何接收端对象所接收。
     
    /**
     * 持有下一个处理请求的对象
     */
    public abstract class Handler {
     
        protected Handler handler;
     
        /**
         * 具体处理方法
         */
        protected abstract int handler(int num);
     
        public Handler getHandler() {
            return handler;
        }
     
        /**
         * 设置下一个处理请求的对象
         */
        public void setHandler(Handler handler){
            this.handler = handler;
        }
    }
    public class AuditHandler extends Handler{
     
        @Override
        protected int handler(int num) {
            num++;
            System.out.println("audit......"+ num);
            return getHandler().handler(num);
        }
     
    }
    public class CleanHandler extends Handler{
     
        @Override
        protected int handler(int num) {
            num++;
            System.out.println("clean......"+ num);
            return getHandler().handler(num);
        }
     
    }
    public class MatchHandler extends Handler{
     
        @Override
        protected int handler(int num) {
            num++;
            System.out.println("match......"+ num);
            return num;
        }
     
    }
    public class Client {
     
        public static void main(String[] args) {
            Handler audit = new AuditHandler();
            Handler clean = new CleanHandler();
            Handler match = new MatchHandler();
     
            audit.setHandler(clean);
            clean.setHandler(match);
     
            audit.handler(0);
        }
     
    }
    参考资料:《深入浅出设计模式》
                     《Head First 设计模式》
     
  • 相关阅读:
    Ceres求解直接法BA实现自动求导
    栈溢出漏洞原理详解与利用
    【机器学习】使用CNN神经网络实现对图片分类识别及模型转换
    【Android】java中调用JS的方法
    5 项大奖,70 项满分!阿里云全方位引领云原生技术升级
    分布式系统架构与云原生—阿里云《云原生架构白皮书》导读
    Dubbo-go 发布 1.5 版,朝云原生迈出关键一步
    阿里产品专家:高情商的技术人,如何做沟通?
    CNCF 新增两个孵化项目 | 云原生生态周报 Vol. 58
    掌门教育微服务体系 Solar | 阿里巴巴 Nacos 企业级落地上篇
  • 原文地址:https://www.cnblogs.com/LeslieXia/p/5494870.html
Copyright © 2011-2022 走看看