快速学习C# 设计模式之职责链模式

1. 介绍职责链模式

职责链模式是一种行为设计模式,它允许将请求沿着一个处理链进行传递,直到链上的某个处理者能够处理该请求。该模式将请求发送者和处理者进行解耦,并且允许多个对象都有机会处理请求。

1.1 职责链模式的结构

职责链模式通常由以下几个组件组成:

抽象处理者(Handler):定义处理请求的接口,并且包含一个指向下一个处理者的引用。

具体处理者(ConcreteHandler):实现抽象处理者接口,在处理请求时判断自己是否有能力处理,如果可以处理则处理请求,否则将请求传递给下一个处理者。

客户端(Client):创建处理链,并将请求发送给链中的第一个处理者。

2. 职责链模式在C#中的应用

在C#中,我们可以使用抽象基类和继承来实现职责链模式。下面以一个简单的例子说明如何在C#中实现职责链模式。

2.1 创建抽象处理者

我们首先创建一个抽象处理者类,用于定义处理请求的方法和持有下一个处理者的引用:

abstract class Handler

{

protected Handler nextHandler;

public void SetNextHandler(Handler handler)

{

nextHandler = handler;

}

public abstract void ProcessRequest(int request);

}

在上述代码中,我们定义了一个抽象方法ProcessRequest用于处理请求,以及一个SetNextHandler方法用于设置下一个处理者的引用。

2.2 创建具体处理者

接下来创建具体的处理者类,实现抽象处理者中的ProcessRequest方法:

class ConcreteHandler1 : Handler

{

public override void ProcessRequest(int request)

{

if (request < 10)

{

Console.WriteLine("Request {0} handled by ConcreteHandler1", request);

}

else if (nextHandler != null)

{

nextHandler.ProcessRequest(request);

}

}

}

class ConcreteHandler2 : Handler

{

public override void ProcessRequest(int request)

{

if (request < 20)

{

Console.WriteLine("Request {0} handled by ConcreteHandler2", request);

}

else if (nextHandler != null)

{

nextHandler.ProcessRequest(request);

}

}

}

class ConcreteHandler3 : Handler

{

public override void ProcessRequest(int request)

{

if (request < 30)

{

Console.WriteLine("Request {0} handled by ConcreteHandler3", request);

}

else if (nextHandler != null)

{

nextHandler.ProcessRequest(request);

}

}

}

上述代码中,我们创建了三个具体处理者类ConcreteHandler1ConcreteHandler2ConcreteHandler3。在每个具体处理者类中,我们实现了ProcessRequest方法,并进行了相应的处理或者将请求传递给下一个处理者。

2.3 客户端代码

最后,我们在客户端代码中创建处理链,并将请求发送给链中的第一个处理者:

static void Main(string[] args)

{

Handler handler1 = new ConcreteHandler1();

Handler handler2 = new ConcreteHandler2();

Handler handler3 = new ConcreteHandler3();

handler1.SetNextHandler(handler2);

handler2.SetNextHandler(handler3);

handler1.ProcessRequest(25);

}

在上述代码中,我们创建了三个具体处理者对象handler1handler2handler3。然后使用SetNextHandler方法将它们链接起来形成处理链。最后,我们通过调用ProcessRequest方法将请求发送给链中的第一个处理者handler1

运行上述代码,将输出Request 25 handled by ConcreteHandler3,说明请求被处理者handler3处理。

3. 总结

职责链模式是一种非常灵活的设计模式,它能够将请求发送者与处理者解耦,并且能够动态地改变处理链的结构。在C#中,我们可以使用抽象基类和继承的方式来实现职责链模式。希望本文对你理解职责链模式的概念和在C#中的应用有所帮助。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签