tengo código que se ve como sigue:Patrón de método de fábrica en Java usando genéricos, ¿cómo?
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..
}
}
Ahora, sé que el código huele .. por muchas razones. Sin embargo, este código también está aquí: http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html, se refieren 9.8
Lo que intento hacer es lo siguiente: 1) Interruptor de mis DAOs implementaciones en tiempo de ejecución basado en el entorno (propiedades del sistema). 2) Hacer uso de los genéricos de Java para que pueda evitar la conversión de tipos ... , por ejemplo, hace algo como esto:
CustomerDAO dao = factory.getCustomerDAO();
dao.getCustomer();
A diferencia:
CustomerDAO dao = (CustomerDAO) factory.getCustomerDAO();
dao.getCustomer();
sus ideas y sugerencias, por favor .
¿Cómo puede tener 'List a = new ArrayList ();' y usarlo sin tener un método de fábrica que necesita un 'tipo de clase' como parámetro. Quiero hacer eso. –