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 Core → Enterprise → Cloud & 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.
What happened?
- LoggingPriceDecorator forwards to BasicPriceService then logs.
- You can stack more decorators (cache, auth) in DI.
Practice next
- Run and see the log line.
- Add a CachingPriceDecorator outside logging.
- Register decorators in DI order carefully.
- Cache results in a dictionary decorator.
- 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.
Sign in to ask a question or upvote helpful answers.
No questions yet — be the first to ask!