设计模式实践-责任链模式

场景

权限递推

实现代码

处理抽象类

namespace DesignPatterns.ChainResponsibility
{
    /// <summary>
    /// 处理者抽象类
    /// </summary>
    public abstract class Handler
    {
        /// <summary>
        /// 上级处理者
        /// </summary>
        protected Handler Successor;

        /// <summary>
        /// Initializes a new instance of the <see cref="Handler" /> class.
        /// </summary>
        /// <param name="successor">上级处理者</param>
        protected Handler(Handler successor)
        {
            this.Successor = successor;
        }

        /// <summary>
        /// 处理动作
        /// </summary>
        /// <param name="request">请求代码</param>
        public abstract void HandleRequest(int request);
    }
}

经理处理类

namespace DesignPatterns.ChainResponsibility
{
    /// <summary>
    /// 经理
    /// </summary>
    public class ManagerHandler : Handler
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ManagerHandler" /> class.
        /// </summary>
        /// <param name="successor">经理上级</param>
        public ManagerHandler(Handler successor) : base(successor)
        {
        }

        /// <summary>
        /// 经理处理动作
        /// </summary>
        /// <param name="request">请求代码</param>
        public override void HandleRequest(int request)
        {
            if (request > 100)
            {
                Console.WriteLine("权限不足,由上级处理");
                this.Successor.HandleRequest(request);
            }
            else
            {
                Console.WriteLine($"由经理处理:{request}");
            }
        }
    }
}

Boss处理类

namespace DesignPatterns.ChainResponsibility
{
    /// <summary>
    /// 老板
    /// </summary>
    public class BossHandler : Handler
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="BossHandler" /> class.
        /// </summary>
        /// <param name="successor">老板上级,为null</param>
        public BossHandler(Handler successor) : base(successor)
        {
        }

        /// <summary>
        /// 经理处理动作
        /// </summary>
        /// <param name="request">请求代码</param>
        public override void HandleRequest(int request)
        {
            Console.WriteLine($"由老板处理:{request}");
        }
    }
}

相关调用

Handler bossHandler = new BossHandler(null);
Handler managerHandler = new ManagerHandler(bossHandler);
managerHandler.HandleRequest(50);
managerHandler.HandleRequest(200);

Out

由经理处理:50
权限不足,由上级处理
由老板处理:200
posted @ 2016-07-24 12:20  4Thing  阅读(103)  评论(0编辑  收藏  举报