代码改变世界

责任链模式(Chain of Responsibility Pattern)

  Clingingboy  阅读(503)  评论(0编辑  收藏  举报

意图:为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。

  using System;
 
   class ChainofResponsibilityPattern {
   
     // Chain of responsibility pattern       Judith Bishop June 2007
     
     class Handler {
       Handler next;
       int id;
       public int Limit {get; set;}
       
       public Handler (int id, Handler handler) {
         this.id = id;
         Limit = id*1000;
         next = handler;
       }
       
       public string HandleRequest(int data) {    
         if (data < Limit)
           return "Request for " +data+" handled at level "+id;
         else if (next!=null)
           return next.HandleRequest(data);
         else return ("Request for " +data+" handled BY DEFAULT at level "+id);
       }
     }
 
     static void Main () {
 
       Handler start = null;
       for (int i=5; i>0; i--) {
         Console.WriteLine("Handler "+i+" deals up to a limit of "+i*1000);
         start = new Handler(i,  start);
       }
       
       int [] a = {50,2000,1500,10000,175,4500};
       foreach (int i in a)
         Console.WriteLine(start.HandleRequest(i));
       Console.ReadKey();
     }
   }
 /*
 Handler 5 deals up to a limit of 5000
 Handler 4 deals up to a limit of 4000
 Handler 3 deals up to a limit of 3000
 Handler 2 deals up to a limit of 2000
 Handler 1 deals up to a limit of 1000
 Request for 50 handled at level 1
 Request for 2000 handled at level 3
 Request for 1500 handled at level 2
 Request for 10000 handled BY DEFAULT at level 5
 Request for 175 handled at level 1
 Request for 4500 handled at level 5
 */
 
 
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2009-08-26 Spring.NET学习笔记(6)-基础AOP
点击右上角即可分享
微信分享提示