Duvida sobre factory mathod  XML
Índice dos Fóruns » Metodologias de Desenvolvimento e Testes de Software
Autor Mensagem
caloro
Thread.start()

Membro desde: 28/04/2008 09:37:19
Mensagens: 42
Offline

Minha duvida pode até ser um tanto quanto ignorante, mais comeceii a ler sobre patterns agora..e estava lendo sobre factory mathod....e o pessoal(até aki no guj) diz q uma das vantagens é q nao precisa asber qual objeto criar, a factory faiz isso...,mais c for v, vc vai solicitar um objeto especifico pra factory, o q diz q vc tem q saber qual objeto instanciar, intaum...c eu sei qual objeto, qual a vantagm de ter um metodo só pra instanciar o objeto, pode ser q estou falando besteira, mais parece meio inutil...se alguem puder me esplicar melhor..agradeceria muito,


e me desculpem se eu disse alguma coisa absurda(o que eu nao duvido), mais é q eu realmente nao intendi direito a finalidade, e pelo q eu vi...varias pessoas usam, e gostaria de saber pq q é tão bom.

Agradeco desde ja.

"O maior prazer da vida é fazer o impossível"
[Email]
fpavao
JavaTeenager
[Avatar]

Membro desde: 11/05/2007 16:43:51
Mensagens: 155
Localização: São Paulo - SP
Offline

Na verdade vc não sabe qual objeto vai instanciar... vc sabe a interface dele, o objeto irá variar de acordo com a implementação do Factory usada...

Fernando Pavão
IBM Certified SOA Associate
IBM Certified Solution Designer - IBM Rational Unified Process V7.0
Sun Certified Java Programmer - SCJP 5
Sun Certified Business Component Developer - SCBCD 5
Sun Certified Enterprise Architect (I) - SCEA 5 (Part 1)
SAP Certified Development Consultant - SAP NetWeaver
Microsoft Certified Professional - MCP
https://www.ibm.com/developerworks/mydeveloperworks/blogs/fpavao/?lang=en
caloro
Thread.start()

Membro desde: 28/04/2008 09:37:19
Mensagens: 42
Offline

Sim, que a factory vai instaciar eu concordo, mais para isso, pode ser por exemplo atravez de um parametro, dependendo do parametro ele instaca um objeto certo?..intaum..mais para mandar o parametro, eu tenho q saber o que eu quero..qual o bjeto...certo?

"O maior prazer da vida é fazer o impossível"
[Email]
fpavao
JavaTeenager
[Avatar]

Membro desde: 11/05/2007 16:43:51
Mensagens: 155
Localização: São Paulo - SP
Offline

Não acho interessante usar parametros, da uma olhada nesta figura...

http://java.sun.com/blueprints/corej2eepatterns/Patterns/images09/figure09_07.gif

vc usaria uma DaoFactory (interface) e a implementação CloudScapeDaoFactory para criar Daos do tipo Cloudscape<alguma coisa> DAO

agora suponha q vc tenha uma outra arvore nesta figura, outra implementação de DaoFactory, que crie DAO de outros tipos.. vc continuaria com sua
DaoFactory (interface) no cliente, mas ao mudar a implementação para o OutraCoisaDaoFactory e não CloudScapeDaoFactory, vc obteria outros objetos, que também implementariam as interfaces CustomerDAo,,etc...

Fernando Pavão
IBM Certified SOA Associate
IBM Certified Solution Designer - IBM Rational Unified Process V7.0
Sun Certified Java Programmer - SCJP 5
Sun Certified Business Component Developer - SCBCD 5
Sun Certified Enterprise Architect (I) - SCEA 5 (Part 1)
SAP Certified Development Consultant - SAP NetWeaver
Microsoft Certified Professional - MCP
https://www.ibm.com/developerworks/mydeveloperworks/blogs/fpavao/?lang=en
caloro
Thread.start()

Membro desde: 28/04/2008 09:37:19
Mensagens: 42
Offline

Bom, o que vc me disse agora é o conseito de usar uma interface, isso eu intendo, sei pq usar e tudo a minha grande duvida é o seguinte, vou usar um exemplo(pode estar errado, devido ao fato de eu nao intender muito bem sobre isso):

Digamos q eu tenho uma class



responsavel pela crição de objetos, dentro dela eu tenho por exemplo:



e assim por diante.

para eu instanciar um cliente eu nao teria q fazer isso:



alguma coisa assim??

e para o funcionario:




Não seria isso, se for assim, eu tenho q saber q eu quero um cliente ou um funcionario pra poder chamar os metodos e a factory instanciar o objeto.

Estou certo ou errado?

"O maior prazer da vida é fazer o impossível"
[Email]
fpavao
JavaTeenager
[Avatar]

Membro desde: 11/05/2007 16:43:51
Mensagens: 155
Localização: São Paulo - SP
Offline

No seu exemplo vc não está usando nenhuma interface...??? ai realmente não tem muita vantagem, se Funcionario fosse uma interface e Factory também, vc poderia ter uma implementação de Factory que retornasse Funcionarios Terceirizados e outra que retorne os da empresa (sendo cada um uma implementação de Funcionario), seu cliente conheceria as interfaces Factory e Funcionario e em runtime poderia estar trabalhando com terceirizados ou não, de acordo com a implementação de Factory q vc usar..

Fernando Pavão
IBM Certified SOA Associate
IBM Certified Solution Designer - IBM Rational Unified Process V7.0
Sun Certified Java Programmer - SCJP 5
Sun Certified Business Component Developer - SCBCD 5
Sun Certified Enterprise Architect (I) - SCEA 5 (Part 1)
SAP Certified Development Consultant - SAP NetWeaver
Microsoft Certified Professional - MCP
https://www.ibm.com/developerworks/mydeveloperworks/blogs/fpavao/?lang=en
tnaires
GUJ Master
[Avatar]

Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline

Vejamos.

Suponha que você tem a seguinte interface:

Suponha também que você tem as seguintes armas:

Agora você quer instanciar objetos das classes que você escreveu. Você pode fazer isso de duas formas:

Usar new diretamente. O problema dessa abordagem é que seu código precisa referenciar diretamente as implementações de armas de fogo ( e conhecer todos os detalhes de sua criação, como por exemplo os parâmetros passados para o construtor ). Veja a seguir:
Se um dia a forma de instanciação de armas de fogo mudar, você terá que propagar a manutenção por todo o seu código.

Ou você pode construir uma fábrica de armas de fogo:
E quando você for instanciar uma arma de fogo, pode fazer simplesmente:
Dessa forma, você tem um local centralizado para instanciar seus objetos, além de abstrair do código cliente todos os detalhes do processo de instanciação - afinal, tudo o que você precisa nesse caso é atirar, não importa com qual arma.

Tarso Nunes Aires

Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires

caloro
Thread.start()

Membro desde: 28/04/2008 09:37:19
Mensagens: 42
Offline

è realmente nao usei interface...

mais é o seguinte...o meu ponto é q mesmo q eu tenho uma classe interface para funcionario e para factory, para eu instanciar um funcionaario tercearizado por exemplo, eu teria q chamar um metodo da classe factory que implementa a interface factory, até ai tudo certo....eu intendi até como funciona a facotry, mais para eu chamar um metodo pra criar um objeto funcionario tercearizado, eu preciso saber que eu quero um funcionario tercearizado, conclusao(na minha opniao), de qqer jeito eu vou saber o que criar, a factory nada mais é do que uma classe para centralizar a criação de objetos.....é isso??

"O maior prazer da vida é fazer o impossível"
[Email]
caloro
Thread.start()

Membro desde: 28/04/2008 09:37:19
Mensagens: 42
Offline

Bom nao tinha lido sua resposta tnaires, agora sim ficou claro pra mim....estou certo intaum...a factory é um modo de centralizar a criacao de objetos......vlw pelo esclarecimento...e vlw tbm fpavao, suas explicaçõe sforam de grande ajuda tbm...

Brigadao msm pessoal..

"O maior prazer da vida é fazer o impossível"
[Email]
fantomas
GUJ Master
[Avatar]

Membro desde: 24/04/2008 16:10:55
Mensagens: 1534
Localização: Terra (maior parte do tempo)
Offline

Oi caloro,

Bacana sua preocupação em entender os padrões, também estou nessa rsrsrs.

Acho que o problema é que vc leu ou ouviu dizer que ao utilizar esse padrão não precisaria "saber qual objeto instanciar" e vc levou ao pé da letra isso e de forma, vamos dizer dizer assim, superficial ( o que é natural ).

Achei o exemplo do tnaires bacana:
tnaires wrote: Arma revolver = Factory.getRevolver();
Arma espingarda = Factory.getEspingarda();


Imagine (acho que ele até disse isso) que na implementação do objeto revolver haja alguma alteração, vc não teria que ajustar estas duas linha apresentada acima e obviamente os objetos não seriam mais os mesmos, se fosse passado algum parametro para getRevolver() ex: getRevolver(Revolver.TAUROS), o usuário deste método não tem condições de dizer qual classe foi instanciada pra gerar o revolver, provavelmente irá dizer que a classe implementou a interface Arma.

Nas explicações sobre os padrões sempre vem os pontos positivos, negativos e o objetivo do padrão faça uma revisão, certamente vc verá que tem mais coisa do isso (saber qual objeto será instanciado) envolvido neste padrão.

Espero ter ajudado e não ter falado muita m#$!@.

P.S. Padrões e Cachaça, use com moderação.

[]'s
TangZero
Java Ninja
[Avatar]
Membro desde: 23/01/2007 16:00:46
Mensagens: 270
Localização: São Paulo
Offline

fantomas wrote:
P.S. Padrões e Cachaça, use com moderação.


Discordo.......... cachaça, faz muito bem para saúde!

TangZero

-SCJP 6
-SCWCD 5
-SCBCD 5



[WWW]
 
Índice dos Fóruns » Metodologias de Desenvolvimento e Testes de Software
Ir para:   
Powered by JForum 2.1.8 © JForum Team