• Chain of Responsibility 职责链模式


    >>返回《C#常用设计模式》

    1. 简介

    • 定义
      • 很多对象由每一个对象对其下家的引用而连接起来形成一条链。
      • 请求在这个链上传递,直到链上的某一个对象决定处理此请求。
      • 发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
      • 责任链可能是一条直线、一个环链或者一个树结构的一部分
    • 类图

    2. 示例

    public abstract class Handler {
        
        /**
         * 持有后继的责任对象
         */
        protected Handler successor;
        /**
         * 示意处理请求的方法,虽然这个示意方法是没有传入参数的
         * 但实际是可以传入参数的,根据具体需要来选择是否传递参数
         */
        public abstract void handleRequest();
        /**
         * 取值方法
         */
        public Handler getSuccessor() {
            return successor;
        }
        /**
         * 赋值方法,设置后继的责任对象
         */
        public void setSuccessor(Handler successor) {
            this.successor = successor;
        }
        
    }
    
    public class ConcreteHandler extends Handler {
        /**
         * 处理方法,调用此方法处理请求
         */
        public override void handleRequest() {
            /**
             * 判断是否有后继的责任对象
             * 如果有,就转发请求给后继的责任对象
             * 如果没有,则处理请求
             */
            if(getSuccessor() != null)
            {            
                Console.WriteLine("放过请求");
                getSuccessor().handleRequest();            
            }else
            {            
                Console.WriteLine("处理请求");
            }
        }
    
    }
    
    public class Client {
    
        public static void main(String[] args) {
            //组装责任链
            Handler handler1 = new ConcreteHandler();
            Handler handler2 = new ConcreteHandler();
            handler1.setSuccessor(handler2);
            //提交请求
            handler1.handleRequest();
        }
    }
    

    如果您认为这篇文章还不错或者有所收获,您可以通过右边的"打赏"功能 打赏我一杯咖啡【物质支持】,也可以点击左下角的【好文要顶】按钮【精神支持】,因为这两种支持都是我继续写作,分享的最大动力!

    作者: 大师兄石头
    来源: https://bigbrotherstone.cnblogs.com/
    声明: 原创博客请在转载时保留原文链接或者在文章开头加上本人博客地址,如发现错误,欢迎批评指正。凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!

  • 相关阅读:
    react dva routerRedux 备忘
    vue实现tab切换
    ios手机弹出层上表单的操作,收起键盘焦点错乱的问题
    FLEX布局
    new Date在ios下的兼容bug
    大数据分析如何创建最佳的移动应用用户体验
    Django适合做大用户量的系统吗?
    用 Django 管理现有数据库
    djongo:Django和MongoDB连接器
    5分钟教你学会Django系统错误监控
  • 原文地址:https://www.cnblogs.com/BigBrotherStone/p/Chain-of-Responsibility.html
Copyright © 2020-2023  润新知