Estou com uma dúvida em quando aplicar o padrão Factory.
Já li diversos tutoriais por aí, mas continuo com dúvidas.
Dentre as diversas explicações que achei, as mais frequentes, foram:
Evitar usar o new, com uma classe concreta e assim, dar ênfase ao poliformismo.
Minha dúvida: se for assim, por que não utilizar SEMPRE o factory?
Para realmente criar objetos polimórficos, como ArrayList ou LinkedList.
Minha dúvida: se for assim, por que o próprio Java não é assim, com as classes que extendem List?
Para simplificar a instanciação de objetos.
Minha dúvida: então, quando NÃO usar este padrão?
Cara geralmente usamos factorys quando queremos trabalhar com a mesma instancias em varios lugares do projeto… por exemplo um objeto conexão… Se toda vez que você for utilizar uma conexao, voce instanciar uma… seu programa vai ter serios problemas, pois vai abrir inumeras conexoes… Porem com o Factory voce vai verificar… se nao existe nenhuma conexao, voce instancia… e se alguem ja tiver feito isso, voce simplesmente retorna o objeto que ja foi criado em algum ponto no seu sistema.
Pelo menos é o que eu entendo sobre a funcionalidade desse padrão…
Abs.
PS. Da uma procurada no scribd que tem alguns pdfs bons sobre patterns, com casos de uso e etc
wesley.comput
Boa tarde julio.
Na minha visão uma das principais vantagens do padrão Factory é a economia de objetos que você têm criando famílias de objetos. Segue um exemplo simples, espero que ajude.
Quem disse que não é para utilizar sempre ? É para utilizar sempre sim.
Só que, se for utilizar sempre vc não vai querer usar Factory directamente, vc vai querer usar um injection container
que básicamente é uma forma de usar Factory sempre.
Objectos não são polimorficos, as variáveis é que são. Esta pergunta eu não entendi.
Quando o seu sistema é muito simples. Quando não está sendo usado polimorfismo.
Quando, mesmo não utilizando polimorfismo não ha necessidade de inicialização especial.
Por exemplo factory não seri usada nos seguintes casos
Desculpem o erro na segunda seção de código. Segue corrigida…
/** * Fabrica de funcionarios "objetos" * @author Wesley */publicclassFuncionarioFactory{publicstaticFuncionariogeFuncionario(StringstrCargo){if(strCargo==null)returnnull;if(strCargo.equals("Secretaria"))returnnewSecretaria();if(strCargo.equals("Gerente"))returnnewGerente();elsereturnnull;}}
sergiotaborda
wesley.comput:
Desculpem o erro na segunda seção de código. Segue corrigida...
/** * Fabrica de funcionarios "objetos" * @author Wesley */publicclassFuncionarioFactory{publicstaticFuncionariogeFuncionario(StringstrCargo){if(strCargo==null)returnnull;if(strCargo.equals("Secretaria"))returnnewSecretaria();if(strCargo.equals("Gerente"))returnnewGerente();elsereturnnull;}}
1) Factory é uma classe, não pode ser implementado com static. O seu codigo cria uma classe com um Factroy Method, mas não cria um factory (o método não é polimorfico)
2)Um factory não tem parametros para a criação. todas as decisões são feitas pelo proprio factory.
Isso não é um Factory, é um Locator.
Locator ( conhecido pelo seu irmão Service Locator) recebe parametros para saber que objeto retornar.