Есть ли какое-либо преимущество в использовании шаблона посетителя в рекурсивном сценарии? Если это так, вы можете продемонстрировать это программно?Шаблон посетителя и рекурсия
2
A
ответ
3
Как насчет прохождения двоичного дерева? например
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
Я думаю, что главным преимуществом является то, что он требует только итераций над коллекциями уровня 1 уровня. Он может перезвонить, но по крайней мере метод accept() будет чистым.
Действительно ли это рекурсивно? Я либо что-то упускаю, либо нет. Я думаю, что вы хотите (в вашем классе VisitNode) visitor.visit (это); и затем вы вызываете this.visit (слева) (и справа). См. [Эту ссылку] (http://cs.lmu.edu/~ray/notes/binarytrees/). – javamonkey79
Внесение изменений в мой последний комментарий, это должно быть left.visit (посетитель) (и справа) – javamonkey79