0

典型的访问者基本上根据从接受(对象)开始的类型来调度访问者。

想象一个在 Collection 接口上工作的访问者。

enum Visiting {
   STOP
   CONTINUE;
}

Visitor {
   accept( Object );
   Visiting visit( Object );
   Visiting visit( Map );
   Visiting visit( List );
   Visiting visit( Set );
   Visiting visit( Collection );
   Visiting visit( ArrayList).
}

典型访问者中的 >ArrayList< 只会调用 visit(List)。调用 visit(Object) -> visit(Collection) -> visit(List) -> visit(ArrayList) 有什么好处吗?如果任何访问返回 Visiting.STOP 链中的下一个不被调用?

有什么可能的论据会使这成为一个糟糕的选择?

  • (-) 性能,而不是简单地根据类型调用一次访问,整个链都会发生。
  • (+) 易于基于某些超类型集中常用操作,无需重复。
4

1 回答 1

0

如果任何访问返回 Visiting.STOP 链中的下一个不被调用?

尝试使用责任链代替访客。您以错误的方式使用访问者,请参考:http ://en.wikipedia.org/wiki/Visitor_pattern

于 2012-11-30T13:39:42.740 回答