2011-12-20 7 views
10

このquestionには、instanceofの束の代わりにビジターパターンを使用できます。 Jmgは「A、B、Cを自由に変更できない場合は、訪問者のパターンを適用して同じようにすることができます」と述べています。instanceofスイッチの代わりにJava訪問者パターン

私が理解する限り、私はまだA、B、Cサポートの訪問者(例えば、accept()メソッドを持っている)を作る必要があります。

私の問題は、A、B、Cを変更する可能性が全くないことです。私はちょうど外国の図書館からCarオブジェクトを取得し、wash()メソッドをトラック、レースカー、バスに特有のものに呼び出す必要があります。

instanceofでまだif-else-ifの構成が必要だと思います。私は正しい?

+0

も参照してください。http://stackoverflow.com/questions/14136721/converting-many-if-else-statements-to-a-cleaner-approach – Raedwald

+0

関連項目http://stackoverflow.com/questions/18231983/java instanceof-conditionsを使用したelse-if-statement-alternative-to-many-else-if – Raedwald

答えて

9

はい、ビジターパターンを実装するには、すべてのクラスが同じシグネチャを持っていない限り、A、B、Cのソースにアクセスする必要があります(したがって、すべて同じ名前のwash()メソッドを使用します)。その場合、多型を使用して正しいメソッドを呼び出すことができます。

それ以外の場合は、ソースコードレベルでアクセスできないクラスに機能を追加することができます。ビジターパターン(http://en.wikipedia.org/wiki/Visitor_pattern)上のWikipediaの記事にJavaの例以下小さな脚注がある:

注:このパターンへのより柔軟なアプローチは、ですacceptメソッドを定義するインタフェースを実装するラッパークラスを作成します。ラッパーには、コンストラクターを通じて初期化できるCarElementを指す参照が含まれています。この手法では、各要素にインタフェースを実装する必要がありません。それは、この記事を参照

[以下の記事Javaのヒント98の記事を参照してください]:、http://www.javaworld.com/javaworld/javatips/jw-javatip98.html

したがって、すべてのすべてで、それは可能だが、それはあなたがやりたい小さなタスクのためのクラスの膨大な数を提供します。もし私があなただったら私はそのインスタンスに固執します。

関連する問題