Design Patterns: State

Durante nosso cotidiano nos deparamos com diversos códigos que podem(e devem) ser melhorados. Em sua grande maioria, nós mesmos que os escrevemos. Uma situação bastante corriqueira são as alterações de comportamentos baseado em um determinado estado que um objeto se encontra.

Por exemplo: imagine que a nossa classe Orcamento possui determinados estados. Ele começa “Em aprovação”, pode ser “Aprovado” ou “Reprovado” e após isso será “Finalizado”. Quando “Em aprovação”, poderemos oferecer 5% de desconto. Quando “Aprovado” 2%, e em qualquer outro estado não haverá desconto.

Em uma abordagem mais tradicional, procuramos representar esses estados com constantes e espalhamos vários ifs pelo nosso código. Algo parecido com a classe abaixo:

O padrão State

Aplicando o State, devemos separar cada comportamento em uma classe representando o estado atual. Desta maneira, fica fácil de trabalharmos com o fluxo de estados e suas regras de negócio. Podemos começar criando a interface que servirá como contexto para o estado atual:

Agora basta a implementarmos:

Agora basta refatorarmos a nossa classe Orcamento, lembrando de alterar os modificadores de acesso para protected:

Pronto! Temos classes pequenas, coesas e bem definidas. Qualquer futura alteração poderá ser executada facilmente, assim como a adição de novos comportamentos.

Referência

Alura — Design Patterns Java I

Obrigado!

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.