Tutorials Design Patterns in C#

Decorator Pattern — Complete Guide

Decorator 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 9 of 69

Decorator Pattern

GoF CoreEnterpriseCloud & Craft

GoF Core · 1 — Create & structure · ~6 min · Module 2: Structural Design Patterns

What is this?

Decorator wraps an object to add behavior without changing its type — stacking responsibilities like logging or caching.

Why should you care?

ShopNest IPriceService needs audit logging without editing the core pricing class.

See it live — copy this example

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

public interface IPriceService { decimal PriceOf(string sku); }
public sealed class BasicPriceService : IPriceService
{
    public decimal PriceOf(string sku) => sku == "HD-100" ? 4999m : 999m;
}
public sealed class LoggingPriceDecorator : IPriceService
{
    private readonly IPriceService _inner;
    public LoggingPriceDecorator(IPriceService inner) => _inner = inner;
    public decimal PriceOf(string sku)
    {
        var p = _inner.PriceOf(sku);
        Console.WriteLine($"price {sku}={p}");
        return p;
    }
}

IPriceService prices = new LoggingPriceDecorator(new BasicPriceService());
Console.WriteLine(prices.PriceOf("HD-100"));

Run Example »

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

Code
Result

What happened?

  • LoggingPriceDecorator forwards to BasicPriceService then logs.
  • You can stack more decorators (cache, auth) in DI.

Practice next

  1. Run and see the log line.
  2. Add a CachingPriceDecorator outside logging.
  3. Register decorators in DI order carefully.
  4. Cache results in a dictionary decorator.
  5. Measure call counts with a counter decorator.

Remember

Wrap to extend behavior. Same interface throughout. Stack via DI.

ShopNest pricing decorators

Logging + cache wrap core pricing.

Outcome: Core math stays pure and testable.

Interview prep for this lesson

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

Mid PDF Detailed
Additional Decorators:?
Short answer: You could introduce more decorators, such as WhippedCreamDecorator, ChocolateDecorator, or CaramelDecorator, for a richer coffee experience. Real-world example (ShopNest) Logging and caching decorators wrap…
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