典型的な 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 回の訪問を単に呼び出すのではなく、パフォーマンス。
- (+)繰り返しなしで、いくつかのスーパータイプに基づいて一般的な操作を簡単に一元化できます。