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 ✓EnterpriseCloud & 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.

Code
Result

What happened?

  • Accept calls the right Visit overload.
  • TotalVisitor sums SKUs.
  • New reports become new visitors if the element set is stable.

Practice next

  1. Sum the sample bundle.
  2. Add CountVisitor.
  3. Know Visitor hurts when element types change often.
  4. DiscountVisitor subtracting 10%.
  5. 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.

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…
Mid PDF Detailed
Component (ICoffee):?
Short answer: This is the base interface that defines the common methods for the Cost() and Description() that every coffee component will implement. public interface ICoffee Example code { double Cost(); string Descript…
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