0

典型的な Visitor は基本的に、accept(Object) で始まるタイプに基づいて Visitor をディスパッチします。

Collection インターフェースで動作する Visitor を想像してみてください。

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).
}

典型的な Visitor の >ArrayList< は、visit(List) のみを呼び出します。visit(Object) -> visit(Collection) -> visit(List) -> visit(ArrayList) を呼び出す利点はありますか。訪問が Visiting.STOP を返した場合、チェーン内の次の訪問は呼び出されませんか?

これを悪い選択にする可能性のある議論は何ですか?

  • (-) チェーン全体が発生するタイプに基づいて 1 回の訪問を単に呼び出すのではなく、パフォーマンス。
  • (+)繰り返しなしで、いくつかのスーパータイプに基づいて一般的な操作を簡単に一元化できます。
4

1 に答える 1

0

訪問が Visiting.STOP を返した場合、チェーン内の次の訪問は呼び出されませんか?

訪問者の代わりに責任の連鎖を試してください。Visitor を間違った方法で使用しています。http: //en.wikipedia.org/wiki/Visitor_patternを参照してください。

于 2012-11-30T13:39:42.740 に答える