Das hier beschriebene Problem ist ein typischer Anwendungsfall des Composite Entwurfsmusters und im weiteren Verlauf des Visitor Entwurfsmusters.
Die Details der Lösung entnehmen Sie dem Quellcode.
Das folgende Klassendiagramm hilft, die Zusammenhänge aller beteiligten Klassen darzustellen:
Im Quellcode finden Sie noch eine weitere Zusatzaufgabe realisiert vor, nämlich die Bestimmung der maximalen Verschachtelungstiefe des Objektbaums.
Neben den visit-Methoden braucht die Visitorschnittstelle noch eine weitere Methode,
die das Verlassen eines Composite-Objekts anzeigt, wie nennen sie leave.
Diese Methode muss nun durch die entsprechede accept-Methode in der Objektstruktur aufgerufen werden.
Wenn sich nun eine Operation für die Verschachtelungstiefe des Objektbaums „interessiert“,
muss sie nur dementsprechend die leave-Methode implementieren.
In dieser Methode muss nur eine Instanzvariable,
die die Verschachtelungstiefe repräsentiert, dekrementiert werden,
während sie in der dazugehörigen visit-Methode inkrementiert wird.
Die Anregung zum diesem Beispiel finden Sie unter
Das Besucher-Muster (Visitor Pattern) in C++.