Java 具有两个不同型号DB的抽象工厂';s

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;

我将抽象FactoryPattern与两个不同的DB模型(Oracle和DB2)一起使用,根据这种模式,我必须为每个factoryDAo实现所有方法,但我不希望在factoryDAo DB2中使用Oracle的方法,因为DB模型是不同的

现在的问题是,在这种情况下,什么是最佳实践,我如何实现这种模式来隔离这两个模型

工厂

    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的答案,使用两个接口,我可以使用抽象工厂模式和不同的模型,你认为这个解决方案如何?不确定你想解决什么问题。模式的存在是为了解决问题。解释一下你想要实现的目标,然后模式可能会自我暗示。