0

特定のタイプ (たとえば、MyClass) のオブジェクトを作成するファクトリ クラスがあります。

ファクトリ クラスは特定のパッケージに属しており、テスト目的で、そのパッケージの実装と新しいバージョンを動的に切り替えたいと考えています。

たとえば、元のパッケージがpack1で、新しいバージョンがpack2で、クラス名がpack1.Factoryと であるとしpack2.Factoryます。pack1またはの選択はpack2、プロパティ ファイルの単純なパラメータを介して指定されます。さらに、MyClassタイプは両方のパッケージで共通であり、プレーンなバニラ Java (つまり、サードパーティ ライブラリではない) のみを使用する必要があります。

または (指定されたプロパティに応じて)のClass.forName()いずれかをロードし、リフレクションを介してすべてのファクトリメソッドを呼び出すために使用することを考えています。pack1.Factorypack2.Factory

それが最善のアプローチですか?

4

2 に答える 2

3

これは、コントロールの注入のほとんど古典的なユースケースです。Guiceを使えばすぐに始められます。

のようなインターフェイスが必要であり、IFactoryいくつかのファクトリ メソッドが必要createです。2 つの Guice モジュールを作成します。1 つは にバインドIFactorypack1.Factory、もう1 つは にバインドしpack2.Factoryます。もちろん、これらのファクトリは両方とも を実装する必要がありますIFactory

次に、メイン メソッドで、どのファクトリを使用するかを決定するパラメーターを処理し、それぞれのモジュールの 1 つに基づいてインジェクターを作成します。

于 2012-04-25T18:58:51.033 に答える
-1

可能な限り反射を避ける必要があります。コードが理解しにくくなり、リファクタリングが難しくなり、保守が難しくなります。

代わりに、ファクトリ クラスにインターフェイスを実装させ、テストするファクトリのインスタンスを作成し、このインスタンスでテストを呼び出すことができます。

于 2012-04-25T18:55:49.823 に答える