• 职责链模式


    定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。

    将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。

    类型:行为类模式

    类图:

      /// <summary>
        /// 模拟if else 判定条件
        /// </summary>
        class Level
        {
            private int _level = 0;
            public Level(int level)
            {
                this._level = level;
            }
    
            /// <summary>
            /// 判定当前条件层级是否高于给定的条件
            /// </summary>
            /// <param name="level"></param>
            /// <returns></returns>
            public bool above(Level level)
            {
                if (this._level >= level._level)
                {
                    return true;
                }
                return false;
            }
        }
    
        /// <summary>
        /// 职责链里面的任务节点
        /// </summary>
        class Request
        {
            private Level _level;
            public Request(Level level)
            {
                this._level = level;
            }
    
            public Level getLevel()
            {
                return _level;
            }
        }
    
        class Response
        {
            public string Message=null;
        }
    
        /// <summary>
        /// 抽象的处理类
        /// </summary>
        abstract class Handler
        {
            private Handler _nextHandler;
    
            public  Response HandleRequest(Request request)
            {
                Response response = null;
    
                if (this.GetHandlerLevel().above(request.getLevel())) //当前的处理器级别高于给定的任务的级别
                {
                    response = this.Response(request);
                }
                else
                {
                    if (this._nextHandler != null) //低于当前的条件判定级别,寻找下一级的处理器
                    {
                        this._nextHandler.HandleRequest(request);
                    }
                    else
                    {
                        //没有合适的处理器
                    }
                }
                return response;
            }
    
            public void SetNextHandler(Handler handler)
            {
                this._nextHandler = handler;
            }
    
            protected abstract Level GetHandlerLevel();
    
            public abstract Response Response(Request request);
        }
    
        /// <summary>
        /// 处理器的具体实现
        /// </summary>
        class ConcreteHandler1 : Handler
        {
            protected override Level GetHandlerLevel()
            {
                return new Level(1);
            }
    
            public override Response Response(Request request)
            {
                //请求由处理器1进行处理
                return null;
            }
        }
    
        /// <summary>
        /// 处理器的具体实现
        /// </summary>
        class ConcreteHandler2 : Handler
        {
            protected override Level GetHandlerLevel()
            {
                return new Level(3);
            }
    
            public override Response Response(Request request)
            {
                //请求由处理器2进行处理
                return null;
            }
        }
    
        /// <summary>
        /// 处理器的具体实现
        /// </summary>
        class ConcreteHandler3 : Handler
        {
            protected override Level GetHandlerLevel()
            {
                return new Level(5);
            }
    
            public override Response Response(Request request)
            {
                //请求由处理器3进行处理
                return null;
            }
        }
    
        public class Client
        {
            public static void Main()
            {
                Handler handler1 = new ConcreteHandler1();
                Handler handler2 = new ConcreteHandler2();
                Handler handler3 = new ConcreteHandler3();
    
                handler1.SetNextHandler(handler2);
                handler2.SetNextHandler(handler3);
    
                Response response = handler1.HandleRequest(new Request(new Level(4)));
            }
        }
  • 相关阅读:
    python——时间与时间戳之间的转换
    Python3中正则模块re.compile、re.match及re.search
    javascript 模块化开发
    Python细说 xrange 和 range 的区别
    PyInstaller 生成exe文件
    win10安装mysql5.7.14winx64遇到服务无法启动问题解决方法
    Python 自定义队列 数据结构
    spring事务使用心得
    LS 存取文件
    Single Instance Application
  • 原文地址:https://www.cnblogs.com/wuMing-dj/p/3238529.html
Copyright © 2020-2023  润新知