Tutorials Design Patterns in C#
Visitor Pattern — Complete Guide
Visitor 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 23 of 69
Visitor Pattern
GoF Core ✓ → Enterprise → Cloud & Craft
Enterprise · 2 — App patterns · ~6 min · Module 3: Behavioral Design Patterns
What is this?
Visitor adds operations to object structures without changing the element classes — double dispatch via Accept/Visit.
Why should you care?
ShopNest pricing reports over a tree of bundles/items need new operations without editing every product type monthly.
See it live — copy this example
Paste into a C# console or class library project and run dotnet run.
public interface ICatalogVisitor { void Visit(SkuItem item); void Visit(Bundle bundle); }
public interface ICatalogNode { void Accept(ICatalogVisitor v); }
public sealed class SkuItem : ICatalogNode
{
public string Sku { get; }
public decimal Price { get; }
public SkuItem(string sku, decimal price) { Sku = sku; Price = price; }
public void Accept(ICatalogVisitor v) => v.Visit(this);
}
public sealed class Bundle : ICatalogNode
{
public List<ICatalogNode> Kids { get; } = new();
public void Accept(ICatalogVisitor v) { v.Visit(this); foreach (var k in Kids) k.Accept(v); }
}
public sealed class TotalVisitor : ICatalogVisitor
{
public decimal Total { get; private set; }
public void Visit(SkuItem item) => Total += item.Price;
public void Visit(Bundle bundle) { }
}
var kit = new Bundle();
kit.Kids.Add(new SkuItem("HD-100", 4999));
kit.Kids.Add(new SkuItem("CASE", 299));
var v = new TotalVisitor();
kit.Accept(v);
Console.WriteLine(v.Total);
Run Example »
Edit the code below and click Run to see the result in Toolliyo’s live editor.
What happened?
- Accept calls the right Visit overload.
- TotalVisitor sums SKUs.
- New reports become new visitors if the element set is stable.
Practice next
- Sum the sample bundle.
- Add CountVisitor.
- Know Visitor hurts when element types change often.
- DiscountVisitor subtracting 10%.
- Print SKUs with a PrintVisitor.
Remember
Externalize operations. Stable element hierarchy. New ops = new visitors.
ShopNest bundle pricing report
Finance runs TotalVisitor over promo bundles.
Outcome: New report types without editing SkuItem.
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!