Chain of Responsibility, bir isteğin, bir zincir şeklinde düzenlenmiş işleyiciler arasında dolaştırılarak işlenmesini sağlar. Her işleyici isteği işleyebilir veya bir sonraki işleyiciye iletebilir.
public abstract class Handler
{
protected Handler next;
public void SetNext(Handler nextHandler)
{
this.next = nextHandler;
}
public abstract void HandleRequest(string request);
}
public class ConcreteHandlerA : Handler
{
public override void HandleRequest(string request)
{
if (request == "A")
{
Console.WriteLine("Handler A is processing the request.");
}
else if (next != null)
{
next.HandleRequest(request);
}
}
}
public class ConcreteHandlerB : Handler
{
public override void HandleRequest(string request)
{
if (request == "B")
{
Console.WriteLine("Handler B is processing the request.");
}
else if (next != null)
{
next.HandleRequest(request);
}
}
}
// Kullanım:
var handlerA = new ConcreteHandlerA();
var handlerB = new ConcreteHandlerB();
handlerA.SetNext(handlerB);
handlerA.HandleRequest("B");
Kaynaklar: Refactoring Guru
Örnekler Reposu: aimtune/design-patterns-examples