Tutorials Design Patterns in C#

Chain of Responsibility Pattern — Complete Guide

Chain of Responsibility Pattern — Complete Guide: free step-by-step lesson with examples, common mistakes, and interview tips — part of Design Patterns in C# on Toolliyo Academy.

On this page

Design Patterns in C# · Lesson 13 of 69

Chain of Responsibility Pattern

GoF Core ✓EnterpriseCloud & Craft

Enterprise · 2 — App patterns · ~6 min · Module 3: Behavioral Design Patterns

What is this?

Chain of Responsibility passes a request along handlers until one handles it — each handler decides to process or forward.

Why should you care?

ShopNest order validation (stock → fraud → coupon) should be a pipeline you can reorder without nested ifs.

See it live — copy this example

Paste into a C# console or class library project and run dotnet run.

public abstract class OrderHandler
{
    protected OrderHandler? Next;
    public OrderHandler SetNext(OrderHandler n) { Next = n; return n; }
    public void Handle(OrderCtx ctx)
    {
        if (!Process(ctx)) return;
        Next?.Handle(ctx);
    }
    protected abstract bool Process(OrderCtx ctx);
}
public sealed record OrderCtx(string Sku, decimal Amount, List<string> Errors);
public sealed class StockHandler : OrderHandler
{
    protected override bool Process(OrderCtx ctx)
    {
        if (ctx.Sku == "BAD") { ctx.Errors.Add("out of stock"); return false; }
        return true;
    }
}
public sealed class FraudHandler : OrderHandler
{
    protected override bool Process(OrderCtx ctx)
    {
        if (ctx.Amount > 100000) { ctx.Errors.Add("fraud hold"); return false; }
        return true;
    }
}

var ctx = new OrderCtx("HD-100", 4999, new());
var stock = new StockHandler();
stock.SetNext(new FraudHandler());
stock.Handle(ctx);
Console.WriteLine(ctx.Errors.Count == 0 ? "ok" : string.Join(",", ctx.Errors));

Run Example »

Edit the code below and click Run to see the result in Toolliyo’s live editor.

Code
Result

What happened?

  • Stock runs first; on failure it stops the chain.
  • Fraud runs only if stock passes.
  • ASP.NET middleware is the same idea at HTTP level.

Practice next

  1. Run happy path and a BAD sku.
  2. Reorder handlers.
  3. Add CouponHandler.
  4. Make Process async Task.
  5. Collect warnings without stopping.

Remember

Pipeline of handlers. Stop or forward. Easy to extend.

ShopNest place-order checks

Stock → fraud → coupon chain before payment.

Outcome: New checks plug in as another handler.

Interview prep for this lesson

Practice these questions aloud after reading—each links to a full structured answer.

Mid PDF Detailed
Chain Setup:?
Short answer: In the Program class, we set up a chain of responsibility by calling SetNext() on the infoLogger and passing it the errorLogger. This ensures that the InfoLogger will process log messages with the Info leve…
Mid PDF Detailed
Abstract Factory (LoggerFactory):?
Short answer: The LoggerFactory class defines a factory method CreateLogger that returns an ILogger object. This is a generic interface for creating various logger types without specifying the concrete class directly. Re…
Mid PDF Detailed
Redo Functionality:?
Short answer: You can extend the system by adding redo functionality. After an undo operation, you could store the undone command in a separate stack and allow users to redo the previous undo operation. Real-world exampl…
Mid PDF Detailed
Abstract Expression (IExpression):?
Short answer: The IExpression interface declares an Interpret method, which is the core of the interpreter pattern. This method is used to interpret and evaluate expressions. public interface IExpression Example code { i…
Mid PDF Detailed
Mediator (ChatMediator):?
Short answer: The mediator manages communication between the users. It maintains a list of all users and broadcasts messages to all other users when one user sends a message. This keeps the users from directly knowing ab…
Questions on this lesson 0

Sign in to ask a question or upvote helpful answers.

No questions yet — be the first to ask!

Design Patterns in C#
Course syllabus

Design Patterns in C# Tutorial

Module 1: Creational Design Patterns
Module 2: Structural Design Patterns
Module 3: Behavioral Design Patterns
Module 4: Enterprise Design Patterns
Module 5: Modern Enterprise Patterns
Module 6: Microservices & Cloud Patterns
Module 7: ASP.NET Core Architecture Patterns
Module 8: Interview & System Design
Toolliyo Assistant
Ask about tutorials, ebooks, training, pricing, mentor services, and support. I use public site content only—not admin or internal tools.

care@toolliyo.com

Need callback? Share your details