2012-03-12 16 views
4

私はインターフェイスがIAです。アダプタBは、そのインタフェースを実装しています。 IZは、X,Y,Zクラスによって実現されるインターフェースである。 IAは、アダプタBを使用して、私のアプリケーションがX、Y、Zと通信するためのインターフェイスです。 BはIZ(アダプタパターン)のインスタンスを含む。アダプタBから、Xに固有の機能にアクセスしたいのですが、アダプタでIZにバインドされているので、でこの機能にアクセスするにはどうすればいいですか?のようにしますか?また、アダプターBのIZのインスタンスは、ユーザーの手動アクティビティーに基づいて実行時に決定されます。依存関係注入を使用してアダプタBのIZのインスタンスをインスタンス化する方法はありますか(新しい演算子を使用しないでください)。
IA
|
B(IZのインスタンスを有する)アダプターのパターンを延長する

IZ
/| \
XYZ

編集:X '、Y'、Z 'が同じインターフェイスIZであるが、Y'には1つの方法がある可能性が高い(Xと同じでない可能性がある) Bからアクセスする必要がある.Y 'とXのユニークなメソッドの両方が、インタフェースIAのいくつかの一般的なメソッドMに適合する。

私はX、Y、ZまたはX'、Y ' 、Z 'は、IZインターフェースを実装することができる以外のものである。しかし、私は、あなたのクラスBIZを介して公開されていないXのパブリックインターフェイスの一部にアクセスしたい場合は、新しいクラスは、私のインターフェイスIA

+0

アダプタBがXの代わりにYまたはZのインスタンスで作成された場合、どのようになると思いますか? –

+0

いくつかの定数を返す – r15habh

+1

IZにもっと多くのメンバーを入れて、 "一定のもの"を返すことによってこれらのメンバーを実装し、Xが通常意図していることを何でもするようにしているようです。 –

答えて

2

に適応できるように、私は基本的にAdapterパターンを使用IAとBを管理していますもはやIZインターフェイス用のアダプタではなくなりました。

一般的なインターフェイスでアクセスされていない場合は、別のタイプの別のアダプタが必要です()。多くの一般的な機能がある可能性があるという記述からは、コードの重複を避けるためにアダプター間の継承を使用できます。

おそらく、適応されるオブジェクトのタイプに基づいてアダプタを作成するファクトリが必要です。ファクトリを使用して、必要に応じてユーザのアクティビティに基づいてX,Y& cのインスタンスをインスタンス化し、それに必要なアダプタを使用することもできます。