Gibt es einen Vorteil für die Verwendung eines Besuchermusters in einem rekursiven Szenario? Wenn ja, können Sie das programmatisch demonstrieren?Besuchermuster und Rekursion
2
A
Antwort
3
Wie wäre es mit einem Binärbaum? z.B.
private class NodeVisitor{
public void visit(VisitableNode<T> node){
if (node!=null) {
print node.data;
}
}
}
public class VisitableTree<T> {
private VisitableNode<T> root;
public void printNodes(){
new NodeVisitor.visit(root);
}
private class VisitableNode<T> {
T data;
VisitableNode<T> left;
VisitableNode<T> right;
public void visit(NodeVisitor<T> visitor){
..do something
visitor.visit(left);
visitor.visit(right);
}
}
}
0
Ich denke, der Hauptvorteil ist, dass es nur Iterationen über Sammlungen 1 Ebene tief erfordert. Es kann zurückrufen, aber zumindest die Methode accept() wird sauber sein.
Verwandte Themen
- 1. OCaml Besuchermuster
- 2. Besuchermuster Erklärung
- 3. Verwenden von Enums und wechseln statt Besuchermuster
- 4. Reflexion Perfect Forwarding und das Besuchermuster
- 5. Ein allgemeineres Besuchermuster
- 6. Beispiel mit Besuchermuster
- 7. Warum das Besuchermuster verwenden?
- 8. Besuchermuster für AST
- 9. .NET C# Besuchermuster
- 10. "und" und Tail-Rekursion
- 11. Besuchermuster in Python
- 12. Besuchermuster: Objektstatus ändern?
- 13. Besuchermuster für boost :: any
- 14. Objective-C-Kategorien == Besuchermuster?
- 15. Befehlsmuster vs. Besuchermuster
- 16. Unit Testing Besuchermuster Architektur
- 17. Pointers und Rekursion
- 18. C: Sprintf und Rekursion
- 19. EventEmitter und Rekursion
- 20. Vererbung und Rekursion
- 21. Akkus, Conj und Rekursion
- 22. Das Alphabet und Rekursion
- 23. Java-Rekursion und Ausnahmen
- 24. Python schöpfen und Rekursion
- 25. Baumstruktur und Rekursion
- 26. Haskell - Maybe und Rekursion
- 27. Rekursion und StackOverflowError
- 28. Rekursion und Pre-Dekrementoperator
- 29. Rekursion und vorbei Referenz
- 30. Verkettung und Rekursion
Ist das wirklich rekursiv? Ich vermisse etwas oder es ist nicht. Ich denke, Sie möchten (in Ihrer VisitNode-Klasse) visitor.visit (this); und dann nennst du das.besuch (links) (und rechts). Siehe [diesen Link] (http://cs.lmu.edu/~ray/notes/binarytrees/). – javamonkey79
Wenn ich meinen letzten Kommentar ändere, sollte es verlassen werden.besuch (Besucher) (und rechts) – javamonkey79