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");}Exemple d’utilisation dans le monde réel
Section intitulée « Exemple d’utilisation dans le monde réel »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.