sexta-feira, 25 de novembro de 2011

Usando padrão strategy para implementar método equals


Nos últimos anos quando preciso implementar o método equals e hashCode de uma classe de domínio da aplicação o processo é o mesmo: Crtl+C e Crtl+V.

Hoje finalmente encheu o saco ;D

Por que não codificar a parte chata e que não muda em apenas uma classe?
E nas outras codificaríamos apenas o que importa, que é como diferenciar dois objetos não-nulos da mesma classe.

Problema:
"Como implementar o método equals de forma elegante seguindo o princípio DRY?"

Com certeza existem formas diferentes de resolver a questão acima. Vou simplesmente postar como eu fiz. Se alguém quiser contribuir com algo relativo ao assunto, favor postar nos comentários.

Usei o padrão strategy, que permite encapsular a parte de um algoritmo que não muda numa classe abstrata e as partes que variam são implementadas em subclasses.

Aqui temos a classe abstrata:

O método abstrato isEquals encapsula a parte do equals que varia e trata a questão primordial levantada anteriormente: como diferenciar objetos não nulos da mesma classe.

Abaixo um exemplo de utilização na implementação do método equals de uma classe chamada CategoriaIdade.



Nesta classe, por questão de simplicidade considerei que basta comparar a propriedade (id) para testar a igualdade dos objetos.

É usada a classe EqualsBuider da biblioteca commons-lang da Apache Software Foundation para fazer comparações de igualdade entre os atributos dos objetos.

Um comentário:

  1. Acho válido. Agora, gostava mais quando vc colocava o próprio código e não uma imagem dele.

    ResponderExcluir