Visitor Pattern

Das Visitor Pattern (siehe Design Pattern) wird benutzt, wenn eine Aktivität mit allen Elementen einer Struktur (z.B. Hierarchie oder Liste) ausgeführt werden soll. Die Aktivität wird durch eine Instanz von Visitor implementiert.

Allen Elementen der Struktur (ObjectStructure) ist gemeinsam, dass sie einen Visitor akzeptieren können (Element.accept). Der Visitor kann im Gegenzug alle Elemente besuchen (Visitor.visit).

public interface Visitor
{
  public void visit(Element1 element);
  public void visit(Element2 element);
}

public interface Element
{
  public void accept(Visitor visitor);
}

public class Element1 implements Element
{
  public Element1()
  {
    super();
  }
  //
  public void accept(Visitor visitor)
  {
    visitor.visit(this);
  }
}

public class Element2 implements Element
{
  public Element2()
  {
    super();
  }
  //
  public void accept(Visitor visitor)
  {
    visitor.visit(this);
  }
}

public class ObjectStructure
{
  private final Element[] elements;
  //
  public ObjectStructure(Element[] elements)
  {
    super();
    //
    this.elements = elements;
  }
  //
  public void accept(Visitor visitor)
  {
    for (int i = 0; i < elements.length; i++)
    {
      Element element = elements[i];
      element.accept(visitor);
    }
  }
}