我有一个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;
}
}
道是的孩子
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()
最佳答案
创建一个接口IGenericDao并在GenericDao上实现,工厂必须返回IGenericDao接口,通过这种方式,您可以使用所有Dao的泛型行为,或者在需要时将其强制转换为特定类型,使用Class代替工厂参数的int方法。
公共静态IGenericDao getDao(Class)
仅使用一种方法的另一个原因是,在将来的实现中,您可以使用反射来实现工厂,并返回正确的类型,而无需更改工厂的所有客户。