2

特定のdaoを返すDAOFactoryがあります

public class DAOFactory {

public static final int DAO1 = 1;
public static final int DAO2 = 2;

public static Object getDao(int dao) {
        switch (dao) {
            case DAO1:
                return new Dao1();
            case DAO2:
                return new Dao2();
        }
        return null;
    }
}

ダオはの子供です

abstract class GenericDao<E, ID extends Serializable> implements
        GenericDaoInterface<E, ID>

したがって、次のようになります。

public class Dao1 extends GenericDao<Dao1, Integer>{
....
}

そして、新しいダオを作成した場合。型キャストをしなければなりません。

Dao1 dao = (Dao1) DAOFactory.getDao(DAOFactory.DAO1);

自動型キャストを行うことは可能ですか、それとも DAOFactory でメソッドを作成して特定の dao を呼び出す方がよいですか? 例えば。public static Dao1 getDao1()

4

2 に答える 2

3

インターフェイス IGenericDao を作成し、それを GenericDao に実装します。ファクトリは IGenericDao インターフェイスを返す必要があります。この方法により、すべての Dao のジェネリック動作を使用したり、必要に応じて特定の型にキャストしたり、ファクトリのパラメータに int の代わりにクラスを使用したりできます。方法。

public static IGenericDao getDao(クラス)

メソッドを 1 つだけ使用するもう 1 つの理由は、将来の実装では、リフレクションを使用してファクトリを実装し、動的に正しい型を返すことができ、ファクトリのすべてのクライアントを変更する必要がないためです。

于 2012-06-28T14:27:58.313 に答える
1

「int」引数を「Class」引数に変更し、ジェネリックを使用してそのクラスの何かを返すことができます。
ただし、これは、使用する DAO クラスがコードでわからない場合にのみ役立ちます。たとえば、ファクトリから任意の DAO サブタイプを取得する必要がある汎用コードなどです。

コードが非常に具体的である場合は、言及した特定のメソッドを作成するだけです。

私見の人々はジェネリックに夢中になります。
ジェネリクス コードがひどく見える場合があり、1 つまたは 2 つの型キャストが問題なく、多くの場合好ましいものです。私が言うように、私見です。

于 2012-06-28T14:18:02.707 に答える