Шаблон посетителя и рекурсия - PullRequest
3 голосов
/ 08 апреля 2009

Есть ли преимущество в использовании шаблона посетителя в рекурсивном сценарии? Если да, то можете ли вы продемонстрировать это программно?

Ответы [ 2 ]

2 голосов
/ 08 апреля 2009

Как насчет обхода двоичного дерева? например

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);
    }
  }
}
1 голос
/ 08 апреля 2009

Я думаю, что главное преимущество состоит в том, что для этого требуются только итерации по коллекциям 1-го уровня. Он может перезвонить, но по крайней мере метод accept () будет чистым.

...