定义:如果有多个对象有机会处理请求,责任链可使请求的发送者和接受者解耦,请求沿着责任链传递,直到有一个对象处理了它为止。
主要解决:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。
namespace ConsoleApp1
{
// 抽象处理者(Handler)
public abstract class ILogger
{
protected int level;
protected ILogger nextLogger;
public void SetNextLogger(ILogger extLogger)
{
nextLogger = extLogger;
}
public void LogMessage(int logLevel, string message)
{
if (logLevel <= level)
{
this.Write(message);
}
else
{
if (nextLogger != null)
{
this.nextLogger.LogMessage(logLevel, message);
}
}
}
protected abstract void Write(string message);
}
// 具体处理者(Concrete Handler)
class ErrorLogger : ILogger
{
public ErrorLogger(int level)
{
this.level = level;
}
protected override void Write(string message)
{
Console.WriteLine("Error:" + message);
}
}
class DebugLogger : ILogger
{
public DebugLogger(int level)
{
this.level = level;
}
protected override void Write(string message)
{
Console.WriteLine("Debug:" + message);
}
}
class InfoLogger : ILogger
{
public InfoLogger(int level)
{
this.level = level;
}
protected override void Write(string message)
{
Console.WriteLine("Info:" + message);
}
}
// 客户类(Client)
class Program
{
static void Main(string[] args)
{
ErrorLogger errorLogger = new ErrorLogger(1);
DebugLogger debugLogger = new DebugLogger(2);
InfoLogger infoLogger = new InfoLogger(3);
errorLogger.SetNextLogger(debugLogger);
debugLogger.SetNextLogger(infoLogger);
errorLogger.LogMessage(1, "errorLogger");
errorLogger.LogMessage(2, "debugLogger");
}
}
}