Pattern State
Vamos continuar com a série Design Patterns apresentando o padrão State, não é um padrão com um grau de dificuldade alta mais não é tão simples como o singleton exibido no ultimo artigo.
O padrão state permite que um objeto altere o seu comportamento quando o seu estado interno muda. O objeto parecerá ter mudado de classe.
O padrão encapsula os estados em classes separadas e delega as tarefas para o objeto que representa o estado atual, nós sabemos que os comportamentos mudam juntamento com o estado interno.
A baixo temos o diagrama de classe.
Obs: Diagrama resumido para termos só o necessário para representação e ficar fácil o entendimento.
Vamos analisar o diagrama.
O contexto é a classe que pode ter vários estados internos diferentes.
A interface estado define uma interface comum para todos os estados concretos. Como são intervambiaveis, todos devem implementar a mesma interface.
Os estado concretos (podemos ter varios estados concretos) lidam com as solicitações provenientes do contexto. Cada estado concreto fornece a sua própria implementação de uma solicitação. Assim, quando o contexto muda de estado, seu comportamento também muda.
Sempre que uma solicitação() é feita ao contexto, ela é delegada ao estado apropriado para ser processado.
Agora vamos imaginar um cenário, vamos imaginar uma conta corrente bem simples com opção de depositar e sacar dinheiro e já imaginamos os estado que essa conta pode estar saldopositivo, saldonegativo e bloqueado.
Vou exibir uma implementação sem utilizar o padrão state para mostrar o quanto ficamos amarrados em ifs e cases deixando a nossa manutenção um pouco complicado pois você pode alterar algo e atrapalhar o funcionamento de tudo o que já estava funcionando e até mesmo validado. public enum ContaState
{
saldoPositivo, saldoNegativo, bloqueado
}
public class Conta
{
public Conta() { this.Saldo = 0; this.MeuEstado = ContaState.saldoPositivo; } public