职责链(Chain of Responsibility)模式 行为型模式
更新: 2023-05-24 11:11:27 字数: 0 字 时长: 0 分钟
把请求从链中的一个对象传到下一个对象,直到请求被响应为止。通过这种方式去除对象之间的耦合。
c#
// 职责链模式示例
using System;
// 定义一个抽象类,表示处理请求的抽象类
public abstract class Handler
{
protected Handler successor; // 定义一个后继对象
public void SetSuccessor(Handler successor) // 设置后继对象
{
this.successor = successor;
}
public abstract void HandleRequest(int request); // 处理请求的抽象方法
}
// 具体处理者类1
public class ConcreteHandler1 : Handler
{
public override void HandleRequest(int request) // 实现处理请求的方法
{
if (request >= 0 && request < 10) // 如果请求在0到10之间,则处理请求
{
Console.WriteLine($"{this.GetType().Name} 处理请求 {request}");
}
else if (successor != null) // 否则将请求传递给下一个处理者
{
successor.HandleRequest(request);
}
}
}
// 具体处理者类2
public class ConcreteHandler2 : Handler
{
public override void HandleRequest(int request) // 实现处理请求的方法
{
if (request >= 10 && request < 20) // 如果请求在10到20之间,则处理请求
{
Console.WriteLine($"{this.GetType().Name} 处理请求 {request}");
}
else if (successor != null) // 否则将请求传递给下一个处理者
{
successor.HandleRequest(request);
}
}
}
// 具体处理者类3
public class ConcreteHandler3 : Handler
{
public override void HandleRequest(int request) // 实现处理请求的方法
{
if (request >= 20 && request < 30) // 如果请求在20到30之间,则处理请求
{
Console.WriteLine($"{this.GetType().Name} 处理请求 {request}");
}
else if (successor != null) // 否则将请求传递给下一个处理者
{
successor.HandleRequest(request);
}
}
}
// 客户端类
public class Client
{
public void Run()
{
// 创建处理者对象
Handler h1 = new ConcreteHandler1();
Handler h2 = new ConcreteHandler2();
Handler h3 = new ConcreteHandler3();
//设置处理者对象的后继对象
h1.SetSuccessor(h2);
h2.SetSuccessor(h3);
// 发送请求
int[] requests = { 2, 5, 14, 22, 18, 3, 27, 20 };
foreach (int request in requests)
{
h1.HandleRequest(request);
}
}
}