Java 具有两个不同型号DB的抽象工厂';s
我将抽象FactoryPattern与两个不同的DB模型(Oracle和DB2)一起使用,根据这种模式,我必须为每个factoryDAo实现所有方法,但我不希望在factoryDAo DB2中使用Oracle的方法,因为DB模型是不同的 现在的问题是,在这种情况下,什么是最佳实践,我如何实现这种模式来隔离这两个模型 工厂Java 具有两个不同型号DB的抽象工厂';s,java,hibernate,jakarta-ee,design-patterns,Java,Hibernate,Jakarta Ee,Design Patterns,我将抽象FactoryPattern与两个不同的DB模型(Oracle和DB2)一起使用,根据这种模式,我必须为每个factoryDAo实现所有方法,但我不希望在factoryDAo DB2中使用Oracle的方法,因为DB模型是不同的 现在的问题是,在这种情况下,什么是最佳实践,我如何实现这种模式来隔离这两个模型 工厂 public abstract class DAOFactory { public static final int ORACLE = 1;
public abstract class DAOFactory {
public static final int ORACLE = 1;
public static final int DB2 = 2;
public abstract ApplicationDAO getApplicationDAO() throws HibernateException;
.
.
public static DAOFactory getDAOFactory(int factory) {
switch (factory) {
case ORACLE:
return new OracleFactoryDao();
case DB2:
return new Db2FactoryDao();
}
return null;
}
FACTORYDAO
public class OracleFactoryDao extends DAOFactory {
public ApplicationDAOImpl getApplicationDAO() {
return new ApplicationDAOImpl();
}
..}
public class DB2FactoryDao extends DAOFactory {
public ApplicationDAOImpl getApplicationDAO() {
return new ApplicationDAOImpl();
}..}
您可以使用两个接口:IOracleFactoryDao和IDB2FactoryDao, 其中,您只放置了一个DB的方法
interface IOracleFactoryDao{
void myOracleMethod();
}
interface IDB2FactoryDao{
void myDB2Method();
}
public class OracleFactoryDao extends DAOFactory implements IOracleFactoryDao {
void myOracleMethod(){...}
}
public class DB2FactoryDao extends DAOFactory implements IDB2FactoryDao{
void myDB2Method(){...}
}
如果对象没有相同的方法,那么使用工厂来创建它们是没有意义的,因为它们将无法互换使用。工厂背后的整个想法是返回同一接口的不同实现。好的,谢谢你的回答,在这种情况下,正确的模式是什么?不知道。不清楚需要解决什么问题。dbugger 23我认为有一个解决方案,它是sab的答案,使用两个接口,我可以使用抽象工厂模式和不同的模型,你认为这个解决方案如何?不确定你想解决什么问题。模式的存在是为了解决问题。解释一下你想要实现的目标,然后模式可能会自我暗示。