设计模式(十八):责任链模式
一、定义
请求在这个链上传递,直到链上的某一个对象决定处理此请求。
发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
二、实例
其实和状态模式类似,只是状态模式在具体的子类中指定了下一个具体的处理对象。而责任链模式,可以在客户端动态的组织链的规则和责任。
首先,上下文类:
public class Context { public string Suffix { get; set; } }
其次,抽象责任
public abstract class BaseHttpModule { public BaseHttpModule NextHttpModule { get; set; } public abstract void Requsest(Context context); }
具体实现:
public class FirstHttpModule : BaseHttpModule { public override void Requsest(Context context) { if (context.Suffix == ".aspx") { Console.WriteLine("文件后缀为:{0}", context.Suffix); } else if (NextHttpModule != null) { NextHttpModule.Requsest(context); } } }
public class LastHttpModule : BaseHttpModule { public override void Requsest(Context context) { if (context.Suffix == ".cshtml") { Console.WriteLine("文件后缀为:{0}", context.Suffix); } else if (NextHttpModule != null) { NextHttpModule.Requsest(context); } } }
客户端:
//------------------------责任链模式---------------------- Responsibility.Context resquestContext = new Responsibility.Context(); resquestContext.Suffix = ".cshtml"; Responsibility.BaseHttpModule aspx = new Responsibility.FirstHttpModule(); Responsibility.BaseHttpModule cshtml = new Responsibility.LastHttpModule(); aspx.NextHttpModule = cshtml; aspx.Requsest(resquestContext); Console.ReadKey();
结果:
三、总结
责任链 可以动态串联责任
状态模式 流程在子类中已经确定。
更多精彩原创心得,请关注微信公众号: 梯形

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?