DAOFactory自动型铸造。 java的

时间:2012-06-28 14:03:04

标签: java

我有一个DAOFactory,它返回一个特定的dao

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;
    }
}

Dao是

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

所以看起来像:

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

如果我创造新的dao。我必须做铸造。

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

是否可以进行自动类型转换,或者最好在DAOFactory中设置方法来调用特定的dao?例如。 public static Dao1 getDao1()

2 个答案:

答案 0 :(得分:3)

创建一个接口IGenericDao并在GenericDao上实现它,工厂必须返回IGenericDao接口,通过这种方式你可以使用所有Dao的通用行为或在需要时转换为特定类型,使用Class而不是int参数到工厂方法。

public static IGenericDao getDao(Class)

仅使用一种方法的另一个原因是,在将来的实现中,您可以使用反射实现工厂并返回dinamicaly正确的类型,并且您不需要更改工厂的所有客户端。

答案 1 :(得分:1)

您可以更改&#34; int&#34;对&#34; Class&#34;的争论一,然后使用泛型返回该类的东西。
但是,如果有时您的代码不知道它将使用哪个DAO类,那么这只会很有用。一些通用代码,需要从工厂中获取任意DAO子类型。

如果你的代码非常具体,那么你可以创建你提到的那些特定方法。

恕我直言,人们会对仿制品感兴趣 有时,泛型代码看起来很糟糕,一个或两个类型很好,通常更可取。就像我说的那样只是恕我直言。