zoukankan      html  css  js  c++  java
  • 职责链模式

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

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

    类型:行为类模式

    类图:

      /// <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)));
            }
        }
  • 相关阅读:
    jQuery.fly插件实现添加购物车抛物线效果
    jQuery 实现前端模糊匹配与首字母搜索
    Java生成微信二维码及logo二维码
    Map 与 JavaBean 的相互装换
    从零写Java Web框架——请求的处理DispatcherServlet
    从零写Java Web框架——实现Ioc依赖注入
    记一次校招面试
    使用DbUtils对JDBC封装实现面向实体查询
    HTTP Status 500 PWC6188 jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
    【插件】百度编译器ueditor插入视频的时候。在预览的窗口提示 “输入的视频地址有误,请检查后再试!
  • 原文地址:https://www.cnblogs.com/wuMing-dj/p/3238529.html
Copyright © 2011-2022 走看看