如何在C#中使用责任链设计模式

设计模式是针对软件设计中常见问题和复杂性的解决方案。 正如我们之前在这里讨论的那样,它们分为三个不同的类别:创造,结构和行为。 责任链设计模式属于行为类别,可用于减少请求的发送者与处理请求的接收者对象之间的耦合。

四人帮”责任链设计模式的定义

通过给一个以上的对象一个处理请求的机会,避免将请求的发送者耦合到其接收者。 链接接收对象,并沿着链传递请求,直到对象处理该请求为止。

[Git要点: Git版本控制入门 Git和GitHub的20个基本指针 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

本质上,在责任链设计模式中,您具有可以处理请求的列表或对象链。 每个对象都可以处理请求,也可以将请求转发给另一个处理程序。 在本文中,我们将讨论责任链设计模式的目的以及如何在C#中实现它。

责任链设计模式

责任链模式的典型实现的参与者包括抽象处理程序,具体处理程序以及客户或使用者。 抽象处理程序是负责定义合同的接口。 具体的处理程序是实现抽象处理程序中定义的操作的组件。 具体的处理程序要么自行处理请求,要么将请求转发给后继者。 最后,客户端组件负责发起请求。

现在让我们探索如何在C#中实现这种设计模式。 假设您已在系统中安装Visual Studio,则可以按照以下步骤在Visual Studio IDE中创建控制台应用程序项目。

  1. 打开Visual Studio IDE
  2. 单击文件->新建->项目
  3. 在“新建项目”对话框窗口中,选择“类库(.Net Framework)”项目模板
  4. 指定项目的名称和位置,然后单击“确定”保存

创建的控制台应用程序项目将包含一个名为Class1.cs的默认文件。 您可以根据需要重命名此文件或创建一个新文件。 现在让我们深入研究代码。

创建抽象处理程序

考虑下面的抽象基类。

public abstract class HandlerBase
    {
        protected HandlerBase successor;
        public void SetSuccessor(HandlerBase handlerBase)
        {
            successor = handlerBase;
        }
        public abstract void ProcessRequest(string request);
    }

HandlerBase类包含两个方法-SetSuccessor和ProcessRequest方法。 前者用于设置后继对象以处理请求,而后者是将处理请求的方法。 我们将在下面显示的具体类中实现这些方法。

创建具体处理程序

考虑以下两个具体类。

public class ConcreteHandlerA : HandlerBase
   {
       public override void ProcessRequest(string request)
          {
              //Some code
          }
   }
public class ConcreteHandlerB : HandlerBase
   {
       public override void ProcessRequest(string request)
          {
              //Some code
          }
   }

落实责任链

最后,我们必须建立责任链。 以下代码说明了如何实现。

static void Main(string[] args)
        {
            string[] codes = { “A001”, “A002”, “A003” };
            HandlerBase handlerA = new ConcreteHandlerA();
            HandlerBase handlerB = new ConcreteHandlerB();
            handlerA.SetSuccessor(handlerB);
            handlerB.SetSuccessor(handlerA);
            foreach (var s in codes)
            {
                handlerA.ProcessRequest(s);
            }
            Console.Read();
        }

请参考上面显示的代码清单。 请注意如何创建具体处理程序的实例以及如何委派职责。 (我将留给您以实现适合您需要的ProcessRequest方法。)还要注意如何将字符串值作为参数传递给ProcessRequest方法。

这只是设计模式的结构化实现。 可以根据需要随意更改此实现。 通过利用责任链设计模式,可以促进应用程序的可重用性和松耦合。

From: https://www.infoworld.com/article/3282833/how-to-use-the-chain-of-responsibility-design-pattern-in-c.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值