关于这位访客的想法

时间:2012-11-29 11:25:52

标签: design-patterns

典型的访问者基本上根据从accept(Object)开始的类型调度访问者。

想象一下在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(Object)有什么好处 - >访问(收藏) - >访问(列表) - >访问(ArrayList的)。如果有任何访问 返回Visiting.STOP未调用链中的下一个?

哪些可能的论据会使这个选择变得糟糕?

  • ( - )表现而不是简单地根据整个链条的类型调用一次访问。
  • (+)易于集中基于某种超类型的常见操作而不重复。

1 个答案:

答案 0 :(得分:0)

  

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

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