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

前言

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

代码

csharp 复制代码
//请求者
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();
    }
}

运行结果

相关推荐
不会编程的懒洋洋2 小时前
VisionPro 中 图像预处理工具
图像处理·笔记·c#·视觉检测·visionpro
JAVA学习通3 小时前
《大营销平台系统设计实现》 - 营销服务 第8节:抽奖规则树模型结构设计
运维·决策树·docker·容器·责任链模式
雪豹阿伟4 小时前
9.C# —— string拓展方法、StringBuilder高性能处理
c#·上位机
刀法如飞4 小时前
Palantir Ontology 存储结构与读写机制原理深入剖析
大数据·设计模式·系统架构
李星星_Alex5 小时前
如何通过 C# 抓取抖音 RTMP 推流码实现自主推流
c#·抖音
KobeSacre7 小时前
设计模式——七大设计原则
设计模式
倒流时光三十年8 小时前
设计模式 之 责任链模式
设计模式·责任链模式
qq7422349848 小时前
全面深入的C#核心知识体系与编程实践精要——从语法基础到高级特性系统学习指南
java·算法·c#
fai厅的秃头姐!10 小时前
2586. 统计范围内的元音字符串数
开发语言·c#
阿文的代码库10 小时前
桥接设计模式的案例实现
设计模式