Aller au contenu

Visitor

Contexte : Représenter une opération à effectuer sur les éléments d’une structure d’objets. Visitor permet de définir une nouvelle opération sans changer les classes des éléments.

public interface IElement
{
void Accept(IVisitor visitor);
}
public class ConcreteElementA : IElement
{
public void Accept(IVisitor visitor) => visitor.VisitConcreteElementA(this);
}
public interface IVisitor
{
void VisitConcreteElementA(ConcreteElementA element);
}
public class ConcreteVisitor : IVisitor
{
public void VisitConcreteElementA(ConcreteElementA element) => Console.WriteLine("Visited A");
}

Traitement d’arbre syntaxique abstrait (AST) : Un compilateur définit différents visiteurs (vérificateur de type, générateur de code, optimiseur) qui parcourent l’AST sans modifier les classes des nœuds.

Exemple : Dans .NET, System.Linq.Expressions.ExpressionVisitor permet de visiter les arbres d’expressions. Roslyn utilise abondamment les visiteurs pour l’analyse et la transformation des arbres syntaxiques.