首页 > 编程语言 >c# 责任链模式

c# 责任链模式

时间:2023-12-25 21:06:09浏览次数:25  
标签:请求 c# request 模式 责任 处理 Handler HandleRequest public


责任链模式是一种行为型设计模式,它允许多个对象按照链式结构处理请求,直到有对象能够处理请求为止。在 C# 中,责任链模式通常通过构建一个处理请求的链来实现。

下面是一个简单的示例:

首先,定义一个处理请求的抽象基类 Handler,该类包含一个指向下一个处理者的引用:

public abstract class Handler
{
    protected Handler successor;

    public void SetSuccessor(Handler successor)
    {
        this.successor = successor;
    }

    public abstract void HandleRequest(string request);
}

然后,定义具体的处理者类,继承自 Handler:

public class ConcreteHandlerA : Handler
{
    public override void HandleRequest(string request)
    {
        if (request == "A")
        {
            Console.WriteLine("ConcreteHandlerA handles the request");
        }
        else if (successor != null)
        {
            successor.HandleRequest(request);
        }
    }
}

public class ConcreteHandlerB : Handler
{
    public override void HandleRequest(string request)
    {
        if (request == "B")
        {
            Console.WriteLine("ConcreteHandlerB handles the request");
        }
        else if (successor != null)
        {
            successor.HandleRequest(request);
        }
    }
}

public class ConcreteHandlerC : Handler
{
    public override void HandleRequest(string request)
    {
        if (request == "C")
        {
            Console.WriteLine("ConcreteHandlerC handles the request");
        }
        else
        {
            Console.WriteLine("No handler can handle the request");
        }
    }
}

最后,在客户端中构建处理者链,然后开始处理请求:

public class Program
{
    public static void Main(string[] args)
    {
        Handler handlerA = new ConcreteHandlerA();
        Handler handlerB = new ConcreteHandlerB();
        Handler handlerC = new ConcreteHandlerC();

        handlerA.SetSuccessor(handlerB);
        handlerB.SetSuccessor(handlerC);

        handlerA.HandleRequest("A");
        handlerA.HandleRequest("B");
        handlerA.HandleRequest("C");
        handlerA.HandleRequest("D");
    }
}

在这个示例中,请求从 handlerA 开始,如果 handlerA 能够处理请求,则处理请求并结束。否则,请求会传递给下一个处理者 handlerB,如果 handlerB 能够处理请求,则继续处理请求并结束。如果请求一直传递到最后一个处理者 handlerC 仍然没有能够处理请求的能力,则结束处理并输出提示信息。

通过责任链模式,可以动态地构建处理请求的链,使得请求的发送者和接收者之间解耦,提高代码的灵活性和可维护性。请注意,在实际应用中,需要根据具体情况设计和组织责任链,确保每个处理者尽量只处理自己负责的请求。


标签:请求,c#,request,模式,责任,处理,Handler,HandleRequest,public
From: https://blog.51cto.com/u_14910409/8972129

相关文章

  • C# 适配器模式
    适配器模式是一种结构型设计模式,它可以将一个或多个不兼容的接口适配成客户端期望的接口。在C#中,适配器模式通常采用类适配器或对象适配器的方式实现。下面是一个简单的类适配器示例:首先,定义一个客户端期望的目标接口,例如ICircle:publicinterfaceICircle{voidDraw(intx......
  • Halcon 5分钟学会9点标定 带图片示例、示例源码
    9点标定应用流程如果没有9个点,其实只需要一个点就可以,移动机械手,只需将这个点在视野内不同坐标即可,前置条件,相机焦距,视野固定高度和角度,光源光强度固定。移动机械手,使用螺丝批头,在视野范围内的白纸上,点九个点,记录每个点位的位置,每个点位的顺序要和图像上获取的圆心数组顺序一致,此时......
  • C# IOC注入示例
    文章目录主函数`常规注入``属性注入``方法注入`主函数usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingUnity;namespaceIOCTest{internalclassProgram{staticvoidMain(......
  • 关于NPOI word 异常解决NPOI.OpenXml4Net.Exceptions.OpenXML4NetRuntimeException:“
    NPOI.OpenXml4Net.Exceptions.OpenXML4NetRuntimeException:“Failtosave:anerroroccurswhilesavingthepackage:Mustsupportwriting源代码stringfileContent=File.ReadAllText(filePath,Encoding.Default);Dictionary<string,string>dic=......
  • C# 解决从其他地方迁移项目,引用中大多数包是感叹号的问题
    当在VisualStudio中复制别人的C#项目时,遇到许多包冒感叹号的问题通常是因为缺少相关的NuGet包或引用不正确导致的。这会在解决方案资源管理器中的引用下显示感叹号。解决办法如下:在VisualStudio中打开项目。在解决方案资源管理器中,找到项目中的引用文件夹。右击要修改......
  • 迭代器模式揭秘:如何优雅应对数据遍历
    推荐语在这篇文章中,深入探讨了迭代器模式的核心原理和实战应用。通过清晰而有条理的解释,读者小伙伴可以领悟到迭代器模式在数据遍历和管理方面的强大能力。无论是初学者还是有经验的开发者,都能从这篇文章中获得实用的知识和技巧,进一步提升代码的可读性和可维护性。什么是迭代器模......
  • JavaScript读写FM1208 CPU卡源码
    本示例使用的发卡器:<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv=&quo......
  • JavaScript读写15693 ICod2 卡源码
    本示例使用设备:<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="......
  • windows使用rclone挂载alist为本地磁盘,设置开机自启
    前言实现在windows下将alist挂载为本地磁盘,并设置开机自启,使得重启后依然生效。教程下载软件Rclone:RclonedownloadsWinFsp:https://winfsp.dev/rel/配置Rclone假设Rclone所在目录是:D:\rclone-v1.64.0-windows-amd64,进入文件目录,在地址栏输入cmd输入rcloneconfig......
  • COAP协议
    COAP协议RFC7252:TheConstrainedApplicationProtocol(CoAP)https://www.rfc-editor.org/rfc/rfc72522.ConstrainedApplicationProtocolTheinteractionmodelofCoAPissimilartotheclient/servermodelofHTTP.However,machine-to-machineinter......