2

最近我遇到了 DAO 有一个 DAOFactory 实例的代码。并且 DAOFactory 有 Connection。DAO 使用 DAOFactory 的 Connection 进行操作。基本上 DAO 依赖于 DAOFactory。这是代码:

DAOFactory.java:

public abstract class DAOFactory {
   public static final int SQL_SERVER = 1;
   public static final int MY_SQL = 2;
   private Connection connection = null;

   public static DAOFactory getDAOFactory(int daoFactoryType) {
      DAOFactory daoFactory = null;

      switch (daoFactoryType) {
         case SQL_SERVER:
            daoFactory = new SQLServerDAOFactory();            
            break; 
         case MY_SQL:
            daoFactory = new MySQLDAOFactory(); 
            break; 
      }

      return daoFactory;
   }

   public Connection getConnection() {
      return connection;
   }
   public void setConnection(Connection connection) {
      this.connection = connection;
   }

   public abstract UserDAO getUserDAO();
   ...  
}

BaseDAO.java:

public abstract class BaseDAO {
   protected DAOFactory daoFactory;

   public BaseDAO(DAOFactory daoFactory) {
      this.daoFactory = daoFactory;
   }
}

用户DAO.java:

public interface UserDAO {
   public User getUserById(int userId) throws DAOException;
   ...
}

SQLServerUserDAO.java:

public class SQLServerUserDAO extends BaseDAO implements UserDAO {
   public SQLServerUserDAO (DAOFactory daoFactory) {
      super(daoFactory);
   }

   @Override
   public User getUserById(int userId) throws DAOException {
      // it uses the connection this way: this.daoFactory.getConnection();
      // implementation 
   }
}

SQLServerDAOFactory.java:

public final class SQLServerDAOFactory extends DAOFactory {
   @Override
   public UserDAO getUserDAO() {
      UserDAO userDAO = null;

      userDAO = new SQLServerUserDAO(this);
      return userDAO;
   }
}

我通常看到 DAO 有 Connection 但这个有 DAOFactory 。

与具有 Connection 的 DAO 相比,使用这种具有 DAOFactory 的 DAO 方法的优缺点是什么?

4

2 回答 2

4

优点:

  1. 根据所需的数据库连接创建对象。
  2. 然后根据创建的数据库创建User。
  3. 遵循标准的抽象工厂设计模式。

缺点:

  1. 无需为单独的连接使用单独的 UserDAO。本来可以用一节课完成的。
于 2015-12-20T06:22:17.803 回答
2

具有 DAOFactory 的 DAO 意味着更改工厂中的连接将更改从它创建的每个 dao 中的连接。这允许在知道连接实例之前创建 DAO。

它的缺点是在 DAOFactory 和 DAO 之间创建循环依赖关系,并导致 DAO 具有比它们需要的更多的依赖关系,这会增加代码的复杂性。

于 2015-12-20T15:55:28.737 回答