Visitor Design Pattern (Um exemplo prático de utilização)

Suponhamos que em uma aplicação para controle e manutenção de peso poderemos contabilizar os pontos dos alimentos ingeridos de várias maneiras tais como:

  1. Calorias
  2. Calorias + Gorduras Totais / Fibras
  3. (outras maneiras de gerar os pontos) ….

Temos, então, uma classe que representa um alimento:

O que acontece é que como temos várias maneiras de realizar o calculo destes pontos, seria complicado encapsular a lógica deste calculo (conforme visto nos itens 1 e 2 acima) dentro do método getPontos() pois caso quisessemos substituir a maneira como fossem feitos os calculos seria necessário uma re-compilação desta classe.

Solução

Vamos desacoplar os “caras” que fazem o calculo destes pontos da classe Alimento.

As classes MyCalc1 e MyCalc2 representam os algoritmos de calculo contidos nos itens 1 e 2 (no começo desta postagem). Repare que elas implementam uma interface chamada Visitor, ou seja, irão exercer o papel de visitantes em alguem (será na classe Alimento) com a finalidade de realizar o calculo dos pontos. Já a classe Alimento implementa uma interface chamada Visitable que aceita a visita dos Visitors.

A consequência direta disso tudo é que foi desacoplada a lógica de calculo de pontos da classe Alimento, permitindo que tenhamos várias lógicas para um mesmo Alimento sem ter que ficar recompilando o código !

Melhor do que ficar tentando explicar agora é dar uma olhada no código. Por favor, faça o download do projeto e execute o código da seguinte forma:

C:\Visitor>java -cp classes Teste

Se quiser recompila-lo:

C:\Visitor>javac -d classes *.java

 Download do projeto: Visitor.rar
Se quiser saber como compilar e executar uma aplicação java clique aqui !

Leia sobre outros artigos de Design Patterns

Esta entrada foi publicada em Design Pattern, Java, Projetos com as etiquetas , . ligação permanente.

4 respostas a Visitor Design Pattern (Um exemplo prático de utilização)

  1. Zé Mauro diz:

    Muito bom Pedro!

    Gostar

  2. Mayckon diz:

    Show! Muito bom!

    Gostar

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s