1
resposta

Estou com dúvidas nessa última parte da explicação do padrão State.

  public class Conta
    {

        interface IEstadoDaConta
        {
            void Saca(Conta conta, double valor);
            void Deposita(Conta conta, double valor);

        }

        public double Saldo { get; set; }
        public double Valor { get; set; }
        public DateTime DataAbertura { get; set; }

       protected IEstadoDaConta  EstadoAtualDaConta; // esta dando erro

        //public void Deposita(double valor)
        //{
        //    Saldo += valor;
        //}


        class Positivo : IEstadoDaConta
        {
            public void Deposita(Conta conta, double valor)
            {
                conta.Saldo += valor * 0.98;
            }

            public void Saca(Conta conta, double valor)
            {
                conta.Saldo -= valor;

                if (conta.Saldo < 0)
                {
                   // COMO FICA ISSO AQUI
                }
            }
        }

        class Negativo : IEstadoDaConta
        {
            public void Deposita(Conta conta, double valor)
            {
                conta.Saldo += valor * 0.95;

                if (conta.Saldo > 0)
                {
                    // COMO FICA ISSO AQUI
                }
            }

            public void Saca(Conta conta, double valor)
            {
                throw new Exception("Sua conta esta no vermelho. Nao e possivel sacar.");
            }
        }



        public void Saca(double valor)
        {
            EstadoAtualDaConta.Saca(this, valor);
        }

        public void Deposita(double valor)
        {
            EstadoAtualDaConta.Deposita(this, valor);
        }
1 resposta

Olá, Maurício! Seguem as implementações dos métodos Saca e Deposita:

Na classe Positivo:

public void Saca(Conta conta, double valor) 
{
    conta.Saldo -= valor;

    if(conta.Saldo < 0)
    conta.Estado = new Negativo();    
}

Na classe Negativo:

public void Deposita(Conta conta, double valor) 
{
    conta.Saldo += valor * 0.95;
    if(conta.Saldo > 0)
        conta.Estado = new Positivo();
}

Boa sorte e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software