0

ファイル用の汎用処理クラスを書きたい。このクラスは、渡されるファイルのタイプに応じて特定のハンドラーインスタンスをロードします。

内部のメソッドの1つは、次のように機能します(コメントを参照)。

public void doSomething( File ) {
// 1) Determine file type.
// 2) Use a lookup to see if an appropriate handler exists.
// 3) If a handler exists, use handler to do something with the file.
}

メインクラスはどのように設計できますか?

PS:コンストラクターまたは専用のルックアップメソッドでプロパティまたはXMLファイルを読み取ることを考えていました。メインクラスにハンドラモジュールをロードできるインターフェイスを参照させるというアイデアもあります。おそらくこれはある種のパターンに対応していますか?

4

2 に答える 2

2

これは、ある種の抽象ファクトリパターンのように見えます。
最初に、次のようなインターフェイスを介してハンドラーの「コントラクト」を定義する必要があります。

public interface Handler {
 void handle(final File file);
}

次に、さまざまなハンドラーを定義する必要があります。XMLHandlerPropertiesHandlerなど。
ここで、ファイル拡張子(たとえば)からハンドラーインスタンスを提供するファクトリが必要です。そのインターフェイスは次のようになります。

public interface HandlerFactory {
  Handler newHandler(final String fileName);
}

これで、これらすべての実装が必要になります。たとえばHandlerFactory、プロパティファイルなどから拡張子->クラスの関連付けを読み取ることができます。

于 2013-02-16T17:19:05.467 に答える
1

これに対応するパターンはいくつかありますが、これはOOPでは非常に一般的なタスクです。

Javaでは、最初にファイルのタイプを判別します。それはあなたにお任せします。

次に、ClassLoaderを使用して、関連するハンドラーをロードしてインスタンス化します。

それを型キャストして、先に進んで使用してください!

動的インスタンス化は、Java、C#などの優れた機能です。

于 2013-02-16T17:16:27.887 に答える