Ho codice che appare come segue:Modello di metodo di fabbrica in java con generici, come?
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..
}
}
Ora, io so che questo codice odori .. per molte ragioni. Tuttavia, questo codice è anche qui: http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html, vedere 9.8
Ciò che intendo fare è questo: 1) Interruttore miei Tao implementazioni in fase di esecuzione in base all'ambiente (proprietà del sistema). 2) Sfruttate generici Java in modo che possa evitare di casting di tipo ... per esempio fa qualcosa di simile:
CustomerDAO dao = factory.getCustomerDAO();
dao.getCustomer();
Al contrario:
CustomerDAO dao = (CustomerDAO) factory.getCustomerDAO();
dao.getCustomer();
I vostri pensieri e suggerimenti, .
Come si può avere 'Elenco a = nuovo ArrayList ();' e usarlo senza avere un metodo factory che ha bisogno di un 'class type' come parametro. Voglio farlo. –