访问者模式和递归

3

在递归场景中使用访问者模式有什么优势吗?如果有的话,你能编写程序进行演示吗?

2个回答

2
如何遍历二叉树?例如:
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);
    }
  }
}

这真的是递归吗?我可能漏掉了什么,或者它不是递归。我认为你想要在你的VisitNode类中使用visitor.visit(this); 然后你调用this.visit(left)(和right)。请参见此链接:http://cs.lmu.edu/~ray/notes/binarytrees/。 - javamonkey79
更正我的上一条评论,应该是 left.visit(visitor)(和 right)。 - javamonkey79
1
这段代码看起来有问题。NodeVisitor.visit 不应该调用 node.visit(this) 吗?然后 VisitableNode.visit 应该调用 left.visit(visitor),但那只是一层间接性。此外,这个答案并没有展示出访问者模式的优势。 - lucidbrot

1
我认为主要的好处是它只需要对一级深度的集合进行迭代。它可以回调,但至少accept()方法会很清晰。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接