Pattern State

Páginas: 5 (1176 palavras) Publicado: 11 de setembro de 2015
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 edelega 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 umainterface 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 umasolicitaçã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 ifse 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 Conta(Double valor)
    {
        this.Deposito(valor);
    }
 
    public Double Saldo { get; set; }
    public ContaState MeuEstado { get; set; }
 
    public void Saque(Double valor)
    {
        switch (MeuEstado)
        {
            case ContaState.saldoPositivo:
                this.Saldo -= valor;
                Console.WriteLine("Retirado R$ {0}, saldo atual R$ {1}.", valor, this.Saldo);                if (this.Saldo > 0)
                    this.MeuEstado = ContaState.saldoNegativo;
                break;
            case ContaState.saldoNegativo:
                this.Saldo -= valor;
                Console.WriteLine("Retirado R$ {0}, saldo atual R$ {1}.", valor, this.Saldo);
 
                if (this.Saldo < -100.00)
                {
                    this.MeuEstado= ContaState.bloqueado;
                }
                break;
            case ContaState.bloqueado:
                Console.WriteLine("Conta bloqueada, saque cancelado, saldo atual R$ {1}.", valor, this.Saldo);
                break;
            default:
                break;
        }
        Console.WriteLine("Estado da conta: {0}\n", this.MeuEstado.ToString());
    }
 
    public void Deposito(Double valor)    {
        this.Saldo += valor;
        if (this.Saldo <= -100.00)
            this.MeuEstado = ContaState.bloqueado;
        else if (this.Saldo >= 0)
            this.MeuEstado = ContaState.saldoPositivo;
        else
            this.MeuEstado = ContaState.saldoNegativo;
 
        Console.WriteLine("Foi depositado R$ {0}, saldo atual R$ {1}", valor, this.Saldo);
        Console.WriteLine("Estadoda conta: {0}\n", this.MeuEstado.ToString());
    }
}
 
Agora vamos aplicar toda teoria que vimos sobre state, vamos encapsular cada estado em uma classe, e para a alteração o estado da classe contexto vamos ter uma ação invocada (Saque ou Deposito), veja o fluxo geral do estou disendo.


E como implementaremos isso?
Primeiro vamos ter que criar uma interface para os estados....
Ler documento completo

Por favor, assinar para o acesso.

Estes textos também podem ser interessantes

  • Composite Pattern
  • Welfare State
  • Welfare State
  • welfare state
  • WELFARE STATE
  • Welfare state
  • O WELFARE STATE
  • welfare state

Seja um membro do Trabalhos Feitos

CADASTRE-SE AGORA!