Iterating Hierarchie von Knoten - Visitor und Composite?

8

Stellen wir uns vor, ich hätte eine Sammlung von Knoten, die ich später für meine Renderer-Klasse verwende. Dann habe ich eine Besucherklasse, die den Knoten oder die gesamte Sammlung besuchen kann. Es ist einfach, weil meine Sammlung von Knoten es ist ein Wrapper für die std :: list mit einigen zusätzlichen Methoden.

Das Problem ist, dass ich eine baumähnliche Struktur für Knoten haben möchte (statt einer einfachen Liste), so dass ein Knoten ein Elternteil und n Kinder haben kann. Das wäre praktisch, da ich gerne einen Knoten an meinen Renderer übergeben und alles "unter" diesem Knoten rendern würde. Die Antwort ist wahrscheinlich Composite.

Wie kann ich Visitor und Composite zusammen verwenden? Ich habe gelesen, dass es oft eine gute Kombination ist, aber meine Implementierungen sehen ziemlich schlecht aus ... Ich vermisse etwas.

    
Nazgob 11.02.2009, 21:20
quelle

3 Antworten

5

Ich habe etwas sehr ähnliches für unser System implementiert. Ich wollte eine Möglichkeit, die Hierarchie geometrischer Objekte zu erstellen und sie in das Volumen zu rendern. Ich habe ein zusammengesetztes Muster verwendet, um meine Beschreibung zu verfassen (root war Node und dann abgeleitetes Kind war compositeNode (Liste der Knoten).)

CompositeNode hat die Methode accept (), die einen Besucher (Visitor) akzeptiert, und dann innerhalb des accept (), den Sie visit- & gt; besuchen (this).

Ihre Besucherhierarchie hat also eine Basisklasse als NodeVisitor und abgeleitete Besucher wie RenderVisitor (Objekte rendern), ReportVisitor (gelöschte Knoteninformationen in Text). Ihre Basisklasse muss sowohl Basis- als auch spezialisierte Knotentypen akzeptieren.

Also, Combo funktioniert und ich habe funktionierenden Code, aber ich stimme zu, dass Design mehr Aufwand erfordert als das, was Sie online lesen würden (Wiki oder Spielzeug).

Hoffe, das hilft

    
Ketan 11.02.2009, 21:55
quelle
3

Hier ist ein einfaches Beispiel:

%Vor%     
Andreas Magnusson 11.02.2009 23:31
quelle
0

Wenn Sie möchten, dass Ihr Besucher auch die Struktur des Baums kennt (z. B. die Tiefe, die er besucht, oder den Pfad von der Baumwurzel), können Sie das hierarchische Besuchermuster verwenden. Dies wird im c2.com-Wiki

etwas ausführlich beschrieben

Es zeigt auch, wie man einen 'uninteressanten' Zweig überspringt.

    
Christian Jung 04.04.2013 15:18
quelle