首页 > 编程语言 >【C#设计模式(14)——责任链模式( Chain-of-responsibility Pattern)】

【C#设计模式(14)——责任链模式( Chain-of-responsibility Pattern)】

时间:2024-11-22 18:50:31浏览次数:3  
标签:14 Chain requestor Requestor Handler HandleRequest nextHandler 设计模式 public

前言

责任链模式通过将请求和处理者解耦,关联多个处理者形成一个链条,使每个处理者都有机会处理请求,避免了将所有处理逻辑集中在一个对象中的复杂性。

代码

//请求者
public class Requestor
{
    private string content;
    public string Content { get { return content; } }
    public Requestor(string content) 
    {
        this.content = content;
    }
}
//处理者
public abstract class Handler
{
    public abstract void SetNext(Handler handler);
    public abstract void HandleRequest(Requestor requestor);
}
//处理者:接收者A
public class ReceiverA : Handler
{
    private Handler nextHandler;
    public override void SetNext(Handler handler)
    {
        nextHandler = handler;
    }

    public override void HandleRequest(Requestor requestor)
    {
        if (requestor.Content.Equals("A")) 
        {
            Console.WriteLine("receiverA handle the request...");
        }
        else if(nextHandler!=null)
        {
            nextHandler.HandleRequest(requestor);
        }
    }
}
//处理者:接收者B
public class ReceiverB : Handler
{
    private Handler nextHandler;
    public override void HandleRequest(Requestor requestor)
    {
        if (requestor.Content.Equals("B"))
        {
            Console.WriteLine("receiverB hanlde the request...");
        }else if (nextHandler != null)
        {
            nextHandler.HandleRequest(requestor);
        }
    }
    public override void SetNext(Handler handler)
    {
        this.nextHandler = handler;
    }
}


/*
 * 行为型模式:Behavioral Pattern
 * 责任链模式: Chain-of-responsibility Pattern
 */
internal class Program
{
    static void Main(string[] args)
    {
        //创建接收请求
        Handler handlerA = new ReceiverA();
        Handler handlerB = new ReceiverB();

        //设置下一个请求处理者
        handlerA.SetNext(handlerB);

        //创建请求者A,并处理请求
        Requestor receiverA = new Requestor("A");
        handlerA.HandleRequest(receiverA);

        Requestor receiverB = new Requestor("B");
        handlerA.HandleRequest(receiverB);

        Requestor requestorC = new Requestor("C");
        handlerA.HandleRequest(requestorC);

        Requestor receiverA2 = new Requestor("A");
        handlerA.HandleRequest(receiverA2);

        Console.ReadLine();
    }
}

运行结果

在这里插入图片描述

标签:14,Chain,requestor,Requestor,Handler,HandleRequest,nextHandler,设计模式,public
From: https://blog.csdn.net/weixin_43626218/article/details/143980771

相关文章

  • 设计模式之 模板方法模式
    模板方法模式是行为型设计模式的一种。它定义了一个算法的骨架,并将某些步骤的实现延迟到子类中。模板方法模式允许子类在不改变算法结构的情况下重新定义算法的某些特定步骤。模板方法模式的核心在于:封装算法的骨架:通过父类中的模板方法定义算法的执行顺序和框架,保证算法结构......
  • CF1114
    A.GotAnyGrapes?CF原题链接题目大意:给出三种葡萄的数目\(x,y,z\),给出三个人要吃的数目\(a,b,c\),已知第一人只吃第一种葡萄,第二人只吃前两种葡萄,第三人三种葡萄都吃,问是否可以满足他们的要求。\((1\leqslantx,y,z,a,b,c\leqslant10^{5})\)解题思路:直接模拟即可。从要求多......
  • GA/T1400视图库平台EasyCVR视频设备轨迹回放平台支持国密35114协议
    随着信息技术的飞速发展,安防视频监控领域也在不断演进,以适应更加复杂和多变的安全需求。在这一背景下,EasyCVR作为一款强大的安防视频监控平台,凭借其卓越的性能和广泛的兼容性,逐渐成为了众多企业和机构的首选。值得一提的是,视频设备轨迹回放平台EasyCVR不仅支持传统的视频监控协议,......
  • Python+LangChain:构建智能对话和工具链的终极指南
    Python+LangChain:构建智能对话和工具链的终极指南随着大语言模型(LLM)的普及,如OpenAI的GPT系列和HuggingFace的Transformers,如何将这些强大的模型与实际应用场景结合变得越来越重要。LangChain是一个为此而生的开源框架,旨在帮助开发者高效构建智能对话系统、工具链......
  • 真题练习14-Word字处理-全国计算机等级考试二级MS Office高级应用与设计考试【汪老师
    视频讲解真题练习14-Word字处理_哔哩哔哩_bilibili题库下载全国计算机等级考试题库下载(用电脑下载安装):请点击题目要求第14套某单位财务处请小张设计《经费联审结算单》模板,以提高日常报账和结算单审核效率。请根据考生文件夹下“Word素材1.docx”和“Word素材2.xlsx”文......
  • 重读《人月神话》(14)-整体部分(The Whole and the Parts)
    系统整体与其组成部分之间的关系,特别是如何有效地管理和集成这些部分,以构建一个成功的软件系统。系统不是简单部分的总和,一个复杂的软件系统不仅仅是其各个部分的简单叠加,系统的行为和性能受到各个部分之间交互的影响,这些交互往往是非线性的,难以预测的。在设计和开发过程中,应......
  • Let'sGoFurther - Chapter 14: User Activation
      zzh@ZZHPC:/zdata/Github/greenlight$migratecreate-seq-ext.sql-dir./migrationscreate_token_table/zdata/Github/greenlight/migrations/000005_create_token_table.up.sql/zdata/Github/greenlight/migrations/000005_create_token_table.down.sql C......
  • 20222414 2024-2025-1《网络与系统攻防技术》实验五实验报告
    1.实验要求(1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息:DNS注册人及联系方式该域名对应IP地址IP地址注册人及联系方式IP地址所在国家、城市和具体地理位置PS:使用whois、dig、nslookup、traceroute、以及各类在线和离线工具进行搜集信......
  • HDOJ 1421 搬寝室 线性dp
    #include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=2010,M=1010,MAX=-1;inta[N];intdp[M][N];signedmain(){ intn,m; while(cin>>n>>m) { for(inti=1;i<=n;i++)cin>>a[i]; sort(a+1,......
  • 144. 二叉树的遍历「前序、中序、后序」 Golang实现
    题目描述:给你二叉树的根节点root,返回它节点值的前序遍历。思路分析:递归法:前序遍历的顺序是中左右的顺序。那么每个子树都是这个顺序,所以可以使用递归进行遍历。递归遍历有3部曲 1.确定递归函数的参数和返回值。 因为返回值要求保存在一个数组中,所以递归函数的参数应该......