| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/03/2007 13:53:24
|
thiagoluisgarcia
Smalltalk
![[Avatar]](/images/avatar/02fae1165420fe30b5717e461d4bc7b3.jpg)
Membro desde: 29/03/2007 13:46:46
Mensagens: 1
Localização: Joinville/SC
Offline
|
Pessoal,
Gostaria de saber como posso fazer uma implementação simples (um exemplo) não utilizando IF ou SWITCH. Alguém pode me ajudar?
[]s
Thiago
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/03/2007 13:57:49
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Olá, seja bem-vindo ao GUJ! Quando tiver um tempo, leia esse artigo que vai te orientar a como usar alguns recursos do forum. Esse assunto é muito estressado no livro refatoração, do Martin/Fowler. O princípio básico é substituir ifs e switchs por polimorfismo. Vou mostrar com um exemplo com o padrão Strategy. Considere a classe: Para usar esse método, o usuário faz algo como: Onde está o strategy nesse código? Bom, o criteria pode ser transformado num strategy. Podemos fazer isso de maneira simples, através de um enum: Agora, aquele nosso código com o switch seria trocado por: Para usar o novo método, o usuário fará: Note que o switch foi completamente eliminado. Outra vantagem é que fossemos adicionar outro método a esse strategy (por exemplo, NOT_CONTAINS), teríamos que modificar apenas o enum, e não localizar no código todos os pontos onde o switch é utilizado. Finalmente, você poderia ter mais de um método abstrato em cada item do strategy. Não é esse caso, mas se você tivesse um enum com algoritmos de criptografia, você poderia ter o encode e o decode. A grande vantagem é que, quando alguém fosse implementar um novo algoritmo, teria um "template" pronto de quais métodos ele deve fornecer. Assim, não há risco de alguém implementar um encode() sem pelo notar a necessidade de implementar um decode().
This message was edited 2 times. Last update was at 30/07/2011 07:43:29
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/10/2008 22:21:46
|
Mak
Debugger
Membro desde: 22/10/2008 22:13:38
Mensagens: 68
Offline
|
Olá ...
Fiquei com uma dúvida ... nesse não há os ConcreteStrategy??
Eles não são necessários para que se caracterize o padrão??
Grato
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/10/2008 05:30:45
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Cada item do enum é um ConcreteStrategy. Nesse caso, as inner classes anônimas que implementam o comportamento do Begin, Contains, Regex, Ends e Equals.
O AbstractStrategy é dado pela própria classe do enum, que tem um método virtual. No lugar desse método virtual, o Enum poderia implementar uma interface SearchStrategy, com esse método, o que daria na mesma (embora ficasse um pouco mais flexível).
Só não fiz isso pq não tinha porque complicar o exemplo. A idéia aqui era mostrar como eliminar o switch, não tanto dar uma aula sobre o padrão e seus detalhes.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/10/2008 10:37:14
|
Mak
Debugger
Membro desde: 22/10/2008 22:13:38
Mensagens: 68
Offline
|
Ok
Agradeço a atenção
|
|
|
 |
|
|
|
|