Patrón Visitor en C#: Guía Completa

Introducción: Operaciones externas

Visitor permite añadir operaciones a estructuras sin modificar sus clases. Es ideal cuando tienes una jerarquía estable y necesitas agregar nuevas operaciones con frecuencia.

La lógica se mueve fuera de las clases base, manteniendo el modelo limpio y abierto a extensiones.

Visitante
Prompt: Visitor icon exploring a museum, minimal flat style.

1. Naturaleza: Observadores expertos

Un biólogo puede analizar el mismo ecosistema y obtener conclusiones distintas sin cambiar el ecosistema.

Cada experto aplica su “visita” con criterios propios, igual que un Visitor agrega una nueva operación sin tocar los elementos.

Observador
Prompt: Scientist observing forest, soft light, documentary style.

2. Mundo Real: Auditorías

Una auditoría recorre objetos (facturas, pedidos) y aplica reglas sin cambiar su implementación.

El modelo de datos se mantiene intacto y las nuevas auditorías se agregan como visitantes independientes.

Auditoría
Prompt: Checklist and documents, clean office style.

3. Implementación en C#: Código Paso a Paso

public interface IVisitor { void Visitar(Documento d); }

public interface IElemento { void Aceptar(IVisitor v); }

public class Documento : IElemento
{
    public string Nombre { get; set; }
    public void Aceptar(IVisitor v) => v.Visitar(this);
}

public class VisitorImpresion : IVisitor
{
    public void Visitar(Documento d) => Console.WriteLine($"Imprimiendo {d.Nombre}");
}

4. Visitor vs Strategy

Strategy cambia algoritmos en un contexto. Visitor aplica operaciones a una estructura completa.

Si necesitas añadir nuevas operaciones sobre muchas clases, Visitor es más adecuado.

5. Diagrama UML

UML Visitor
Prompt: UML diagram of Visitor pattern, clean vector layout.
Recorrido visitor
Prompt: Visitor traversal diagram, minimal infographic style.

⚠️ Cuándo NO Usar Visitor

  • Si la estructura cambia constantemente (añadir nuevos elementos es costoso).
  • Si el costo de modificar todas las clases con accept no se justifica.

💪 Ejercicio

Crea un visitor que calcule el costo total de distintos tipos de productos.

Conclusión

Visitor es ideal cuando necesitas añadir operaciones sin tocar estructuras existentes. Es potente cuando las operaciones cambian más que la estructura.