Fabrica duvida

2 respostas
M

Como faço para uma fabrica escolher entre duas opcoes dinamicamente? Podem dar qualquer exemplo ou apenas explicar uma possivel forma…

2 Respostas

J

O ideal é usar uma fabrica abstrata e cada fabrica concreta fabrica um tipo especifico de objeto...

ex.: (é o que eu sempre digo mesmo, de DAO, falta de criatividade...)

public interface UsuarioDao{
   public void inserir(Usuario usu);
}

public classe UsuarioDaoJdbc implements UsuarioDao{
   public void inserir(Usuario usu){
      //insere no banco
   }
}

public class UsuarioDaoXml implements UsuarioDao{
   public void inserir(Usuario usu){
     //insere no xml
   }
}

public interface DaoFactory{
   public UsuarioDao makeUsuarioDao();
}

public class DaoFactoryJdbc implements DaoFactory{
   public UsuarioDao makeUsuarioDao(){
      return new UsuarioDaoJdbc();
   }
}

public class DaoFactoryXml implements DaoFactory{
   public UsuarioDao makeUsuarioDao(){
      return new UsuarioDaoXml();
   }
}
DaoFactory factory = new DaoFactoryXml();
UsuarioDao udao = factory.makeUsuarioDao();

Só que aí tem outro problema, quem vai "fabricar fabricas"? Eu geralmente resolvo isso com um Factory Method ou com uma outra fabrica de fabricas... algo assim:

public class DaoFactoryBuilder{
   public DaoFactory buildDaoFactory(){
      return new DaoFactoryXml();
   }
}
Assim, caso eu queira mudar todo o esquema de persistencia da aplicação, é só mudar a classe que é instanciada aí...

Mas se seu caso for mais simples, talvez nem precise disso tudo...

M

Muito obrigado pela ajuda! Meu caso era bem semelhante! Eu não estava sabendo era como fazer para a escolha dinamica, mas, a última fabrica que voce fez realmente faz com que o cliente nao necessite em absoluto saber qual o tipo de persistencia.

Grato pela ajuda!
Criado 20 de setembro de 2006
Ultima resposta 25 de set. de 2006
Respostas 2
Participantes 2