| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2010 20:59:21
|
spinow
Thread.start()
![[Avatar]](/images/avatar/92a84c7a19445c97460b85315fae84d5.png)
Membro desde: 16/07/2009 20:00:33
Mensagens: 25
Offline
|
Olá a todos,
Já existem vários tópicos sobre esse padrão de projeto, eu sei, mas minha dúvida é um pouco mais específica.
Bom, primeiro vai o código.
Tenho assim o meu Abstract Factory:
Bom, primeiro, como existem aqui vários experts no assunto, gostaria de saber se consegui assimilar o padrão, segundo, e principal, diz respeito a utilizaçao por parte do cliente:
É correto o método "create()" retornar a classe abstrata (Usuario)? Acho estranho, pois, assim teria que fazer um cast toda hora, até pq UsuarioFisico tem o método getCpf(), no qual não existe, obviamente no UsuarioJuridico...
Opinem, por favor...
Obrigado!
This message was edited 2 times. Last update was at 14/01/2010 21:02:30
|
powered by  |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/01/2010 09:12:59
|
pozzo
JavaGuru
Membro desde: 08/04/2006 11:07:20
Mensagens: 271
Localização: Curitiba
Offline
|
É assim mesmo, a aplicação não deve saber qual o tipo de factory usada ou objeto retornado. O que importa é que o 'tipo certo' seja retornado.
Bom, neste caso você vai ter que fazer cast. Pois o método getCpf não existe em UsuarioJuridico. Mas veja que fica mais interessante quando você tem métodos sobrescritos, e em tempo de execução, é decidido qual executar.
This message was edited 1 time. Last update was at 15/01/2010 09:13:43
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/01/2010 16:50:38
|
asaudate
Virtual Machine Man
![[Avatar]](/images/avatar/974e2945a18e0bfb8e3aa8becac3e65c.jpg)
Membro desde: 01/09/2007 19:31:41
Mensagens: 546
Localização: São Paulo
Offline
|
spinow wrote:Olá a todos,
Já existem vários tópicos sobre esse padrão de projeto, eu sei, mas minha dúvida é um pouco mais específica.
Bom, primeiro vai o código.
Tenho assim o meu Abstract Factory:
Bom, primeiro, como existem aqui vários experts no assunto, gostaria de saber se consegui assimilar o padrão, segundo, e principal, diz respeito a utilizaçao por parte do cliente:
É correto o método "create()" retornar a classe abstrata (Usuario)? Acho estranho, pois, assim teria que fazer um cast toda hora, até pq UsuarioFisico tem o método getCpf(), no qual não existe, obviamente no UsuarioJuridico...
Opinem, por favor...
Obrigado!
Está quase lá... o seu método getInstance() está meio "complicado", porque se o cliente sabe que Usuário quer, como nessa linha:
então não tem porque usar factory, concorda?
Nesse caso (especificamente), eu diria a você criar um mapa com o input e atrelar às instâncias de factory que você quer. Por exemplo:
Assim, você anexa o input de acordo com a Factory, mas se ficar tudo na mesma classe, não tem problema.
Quanto ao caso do método getCpf, você poderia fazer um esquema semelhante de classes abstratas, mas com os usuários. Substitua getCpf() por getDocumento, que fica numa interface (evite usar herança!) e substitua o método na sua classe Factory, tb.
[]´s
This message was edited 2 times. Last update was at 16/01/2010 15:05:05
|
O dito acima não é uma verdade absoluta, não precisa cortar os pulsos se não concordar.
Entretanto, se você não quer ajuda, melhor não pedir: poupe o seu e o meu tempo.
Meu blog: http://alesaudate.wordpress.com/ - assunto do dia: O que é BPEL e qual seu propósito? |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 09:47:41
|
spinow
Thread.start()
![[Avatar]](/images/avatar/92a84c7a19445c97460b85315fae84d5.png)
Membro desde: 16/07/2009 20:00:33
Mensagens: 25
Offline
|
Está quase lá... o seu método getInstance() está meio "complicado", porque se o cliente sabe que Usuário quer, como nessa linha:
Tem toda a razão... realmente fugiu da idéia da utilização do padrão... Curti a idéia de passar o input, massa mesmo!
Substitua getCpf() por getDocumento
Ótima alternativa tbm! Valew pela ajuda de todos!
This message was edited 1 time. Last update was at 26/01/2010 09:49:45
|
powered by  |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 10:06:11
|
mario.fts
Virtual Machine Man
![[Avatar]](/images/avatar/9e96d422fba85185a33829439f5df09d.jpg)
Membro desde: 14/05/2008 09:41:06
Mensagens: 632
Localização: São Paulo - ZL
Offline
|
Eu prefiro algo do tipo:
Assim não precisa saber as flags, os nomes dos métodos já deixam claro o que será retornado.
This message was edited 1 time. Last update was at 26/01/2010 10:06:33
|
Mário Amaral Gonçalves |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 10:17:44
|
Leonardo3001
Virtual Machine Man
Membro desde: 04/07/2007 18:28:58
Mensagens: 824
Offline
|
mario.fts wrote:Eu prefiro algo do tipo:
Assim não precisa saber as flags, os nomes dos métodos já deixam claro o que será retornado.
Pode até ser. Mas aí deixaria de ser um Abstract Factory, que é um padrão que abstrai uma família de factories. Afinal, na sua implementação, o cliente sabe qual factory está sendo utilizado, o que não é a intenção.
|
Leonardo Veríssimo
-------------------------------------------------
Objectzilla |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 10:21:35
|
mario.fts
Virtual Machine Man
![[Avatar]](/images/avatar/9e96d422fba85185a33829439f5df09d.jpg)
Membro desde: 14/05/2008 09:41:06
Mensagens: 632
Localização: São Paulo - ZL
Offline
|
e passando o flag ele não sabe?
|
Mário Amaral Gonçalves |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 10:27:15
|
asaudate
Virtual Machine Man
![[Avatar]](/images/avatar/974e2945a18e0bfb8e3aa8becac3e65c.jpg)
Membro desde: 01/09/2007 19:31:41
Mensagens: 546
Localização: São Paulo
Offline
|
Naquele jeito que eu passei alí em cima, não. Ele só sabe que , de acordo com o input, ele vai retornar uma factory diferente. Acontece que esse input vem do controller, que vem da view... ou seja, vai mudando. Se por acaso a view acrescentar mais valores, por exemplo, é só acrescentar uma entrada no map.
[]´s
|
O dito acima não é uma verdade absoluta, não precisa cortar os pulsos se não concordar.
Entretanto, se você não quer ajuda, melhor não pedir: poupe o seu e o meu tempo.
Meu blog: http://alesaudate.wordpress.com/ - assunto do dia: O que é BPEL e qual seu propósito? |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 12:53:49
|
spinow
Thread.start()
![[Avatar]](/images/avatar/92a84c7a19445c97460b85315fae84d5.png)
Membro desde: 16/07/2009 20:00:33
Mensagens: 25
Offline
|
Naquele jeito que eu passei alí em cima, não. Ele só sabe que , de acordo com o input, ele vai retornar uma factory diferente. Acontece que esse input vem do controller, que vem da view... ou seja, vai mudando. Se por acaso a view acrescentar mais valores, por exemplo, é só acrescentar uma entrada no map.
Se eu consegui entender a necessidade do padrão Abstract Factory, acredito que esta explicação é bem válida, pois, deixa mais "genérico". Certo?
|
powered by  |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 13:09:22
|
asaudate
Virtual Machine Man
![[Avatar]](/images/avatar/974e2945a18e0bfb8e3aa8becac3e65c.jpg)
Membro desde: 01/09/2007 19:31:41
Mensagens: 546
Localização: São Paulo
Offline
|
spinow wrote:
Naquele jeito que eu passei alí em cima, não. Ele só sabe que , de acordo com o input, ele vai retornar uma factory diferente. Acontece que esse input vem do controller, que vem da view... ou seja, vai mudando. Se por acaso a view acrescentar mais valores, por exemplo, é só acrescentar uma entrada no map.
Se eu consegui entender a necessidade do padrão Abstract Factory, acredito que esta explicação é bem válida, pois, deixa mais "genérico". Certo?
Certo! Você está deixando de lado a necessidade de saber qual o produto. OK, você está acoplando a entrada com uma factory, mas como eu disse antes, não tem problema se você fizer isso num façade ou coisa assim.
[]´s
|
O dito acima não é uma verdade absoluta, não precisa cortar os pulsos se não concordar.
Entretanto, se você não quer ajuda, melhor não pedir: poupe o seu e o meu tempo.
Meu blog: http://alesaudate.wordpress.com/ - assunto do dia: O que é BPEL e qual seu propósito? |
|
|
 |
|
|