设计模式实践-责任链模式
场景
权限递推
实现代码
处理抽象类
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