在软件开发中,我们经常会遇到需要将一个请求沿着多个处理者传递的场景。比如审批流程、日志记录、权限验证等。这时候,责任链模式(Chain of Responsibility Pattern)就派上用场了。本文将用通俗易懂的方式,带你深入理解 C# 中的责任链模式,并通过完整示例代码帮助你掌握这一重要的行为型设计模式。
责任链模式是一种行为型设计模式,它允许多个对象有机会处理同一个请求,从而避免请求的发送者与接收者之间的耦合。这些对象被连接成一条链,请求沿着这条链传递,直到有一个对象处理它为止。
下面我们通过一个“请假审批”系统来演示如何在 C# 中实现责任链模式。假设公司有三级审批:组长(≤2天)、经理(≤5天)、总监(>5天)。
public abstract class Approver{ protected Approver nextApprover; public void SetNext(Approver approver) { this.nextApprover = approver; } public abstract void ProcessRequest(LeaveRequest request);} public class LeaveRequest{ public string EmployeeName { get; set; } public int Days { get; set; } public LeaveRequest(string name, int days) { EmployeeName = name; Days = days; }} // 组长:可批准 ≤2 天public class TeamLeader : Approver{ public override void ProcessRequest(LeaveRequest request) { if (request.Days <= 2) { Console.WriteLine($"[组长] 批准了 {request.EmployeeName} 的 {request.Days} 天请假。"); } else if (nextApprover != null) { Console.WriteLine($"[组长] 无法处理 {request.Days} 天的请假,转交上级。"); nextApprover.ProcessRequest(request); } }}// 经理:可批准 ≤5 天public class Manager : Approver{ public override void ProcessRequest(LeaveRequest request) { if (request.Days <= 5) { Console.WriteLine($"[经理] 批准了 {request.EmployeeName} 的 {request.Days} 天请假。"); } else if (nextApprover != null) { Console.WriteLine($"[经理] 无法处理 {request.Days} 天的请假,转交总监。"); nextApprover.ProcessRequest(request); } }}// 总监:批准所有 >5 天的请假public class Director : Approver{ public override void ProcessRequest(LeaveRequest request) { Console.WriteLine($"[总监] 批准了 {request.EmployeeName} 的 {request.Days} 天请假。"); }} class Program{ static void Main(string[] args) { // 创建处理器 var teamLeader = new TeamLeader(); var manager = new Manager(); var director = new Director(); // 构建责任链 teamLeader.SetNext(manager); manager.SetNext(director); // 提交多个请假请求 var requests = new List<LeaveRequest> { new LeaveRequest("张三", 1), new LeaveRequest("李四", 3), new LeaveRequest("王五", 7) }; foreach (var req in requests) { teamLeader.ProcessRequest(req); Console.WriteLine(); } }} [组长] 批准了 张三 的 1 天请假。[组长] 无法处理 3 天的请假,转交上级。[经理] 批准了 李四 的 3 天请假。[组长] 无法处理 7 天的请假,转交上级。[经理] 无法处理 7 天的请假,转交总监。[总监] 批准了 王五 的 7 天请假。 通过上面的例子,我们可以看到责任链模式在 C# 中的优雅实现。它让每个处理器只关注自己的职责,同时通过链式调用实现灵活的流程控制。这种模式特别适合用于构建可扩展、可维护的请求处理链系统。
记住这四个核心SEO关键词: 责任链模式、 C#设计模式、 行为型设计模式、 请求处理链。 它们不仅有助于搜索引擎优化,也准确概括了本文的核心内容。
希望这篇教程能帮助你轻松掌握责任链模式!如果你觉得有用,欢迎分享给其他正在学习 C# 设计模式的朋友。
本文由主机测评网于2025-12-22发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251211555.html