У меня есть код, который выглядит следующим образом:
public interface BaseDAO{
// marker interface
}
public interface CustomerDAO extends BaseDAO{
public void createCustomer();
public void deleteCustomer();
public Customer getCustomer(int id);
// etc
}
public abstract class DAOFactory {
public BaseDAO getCustomerDAO();
public static DAOFactory getInstance(){
if(system.getProperty("allowtest").equals("yes")) {
return new TestDAOFactory();
}
else return new ProdDAOFactory();
}
public class TestDAOFactory extends DAOFactory{
public BaseDAO getCustomerDAO() {
return new TestCustomerDAO(); // this is a concrete implementation
//that extends CustomerDAO
//and this implementation has dummy code on methods
}
public class ProdDAOFactory extends DAOFactory {
public BaseDAO getCustomerDAO() {
return new ProdCustomerDAO(); // this implementation would have
// code that would connect to the database and do some stuff..
}
}
Теперь я знаю, что этот код пахнет .. по многим причинам. Тем не менее, этот код также здесь:
http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html, см. 9,8
Что я собираюсь сделать, это:
1) Переключить мои реализации DAOs во время выполнения на основе среды (свойства системы).
2) Используйте дженерики Java, чтобы я мог избежать приведения типов ...
например делает что-то вроде этого:
CustomerDAO dao = factory.getCustomerDAO();
dao.getCustomer();
В отличие от:
CustomerDAO dao = (CustomerDAO) factory.getCustomerDAO();
dao.getCustomer();
Ваши мысли и предложения, пожалуйста.