基于C#的设计模式学习之责任链模式

        责任链模式是一种对象行为型模式,其避免请求的发送者与多个请求的处理者紧密耦合,将所有的请求通过链式的结构,前一个对象引用后一个对象。当有请求发出时,请求将会沿着链进行传播最终被需要执行的对象处理。以公司请假为例,请假3天以内,部门经理批准,请假3到7天,需要总监批准,请教超过7天需要CEO批准,员工只需要告诉责任链要请假几天,责任链会让有权限的审批者处理。

 

namespace Designmode.ChainOfResponsibility
{
    /// <summary>
    /// 审批者的抽象类
    /// </summary>
    public abstract class Approver
    {
        /// <summary>
        /// 下一个审批者
        /// </summary>
       protected Approver _nextHandler = null;
        /// <summary>
        /// 请求方法
        /// </summary>
        /// <param name="days">请假的天数</param>
       public abstract void Request(int days);
       /// <summary>
       /// 设置下一个审批者
       /// </summary>
       /// <param name="approver">下一个审批者</param>
       public Approver SetNext(Approver approver)
        { 
            this._nextHandler = approver;
            return approver;
        }

        /// <summary>
        /// 获取下一个审批者
        /// </summary>
        /// <param name="approver">下一个审批者</param>
        public Approver GetNext()
        {
          return  this._nextHandler;
        }
    }
}
namespace Designmode.ChainOfResponsibility
{
    /// <summary>
    /// 部门经理
    /// </summary>
    public class DepartmentManager : Approver
    {
        /// <summary>
        /// 请假
        /// </summary>
        /// <param name="days"></param>
        public override void Request(int days)
        {
            if (0 < days && days <= 3)
            {
                Console.WriteLine("部门经理批准请假");
            }
            else
            {
                this._nextHandler?.Request(days);
            }
        }
    }
}
namespace Designmode.ChainOfResponsibility
{
    /// <summary>
    /// 部分总监
    /// </summary>
    public class DepartmentDirector : Approver
    {
        /// <summary>
        /// 请假
        /// </summary>
        /// <param name="days"></param>
        public override void Request(int days)
        {
            if (3 < days && days <= 7)
            {
                Console.WriteLine("部门总监批准请假");
            }
            else
            {
                this._nextHandler?.Request(days);
            }
        }
    }
}
namespace Designmode.ChainOfResponsibility
{
    /// <summary>
    /// CEO
    /// </summary>
    public class CEO : Approver
    {
        /// <summary>
        /// 请假
        /// </summary>
        /// <param name="days"></param>
        public override void Request(int days)
        {
            if (days > 7)
            {
                Console.WriteLine("CEO批准请假");
            }
            else
            {
                this._nextHandler?.Request(days);
            }
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值