最近、DAO に DAOFactory のインスタンスがあるコードを見つけました。そしてDAOFactoryには接続があります。DAO は DAOFactory の接続を使用して操作を行います。基本的に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 のこのアプローチを使用することの長所と短所は何ですか?