Pessoal me surgiu uma dúvida sobre onde de fato, colocar as classes de estado no meu projeto.
O que eu consigo perceber é que, as classes de estado representam única e exclusivamente os estados da classe em si.
Portanto é necessário mesmo criarmos os estados em um arquivo separado, visto que, apenas 1 objeto pode utilizar aqueles estados?
Poderíamos, ao invés de criar classes separadas, criarmos os estados dentro da própria classe que a utiliza, ou seja, classes internas?
Dessa forma:
public class Conta {
private double saldo;
private EstadoDaConta estadoAtual;
public Conta(double saldo) {
this.saldo = saldo;
if (this.saldo > 0) {
this.estadoAtual = new ContaPositiva();
}
}
public void sacar(double valorSaque) {
estadoAtual.sacarDa(this, valorSaque);
}
public void depositar(double valorDeposito) {
estadoAtual.depositarNa(this, valorDeposito);
}
public double getSaldo() {
return saldo;
}
private class ContaPositiva implements EstadoDaConta {
@Override
public void sacarDa(Conta conta, double valorSaque) {
conta.saldo -= valorSaque;
if (conta.saldo < 0) {
conta.estadoAtual = new ContaNegativa();
}
}
@Override
public void depositarNa(Conta conta, double valorDeposito) {
conta.saldo += valorDeposito * 0.98;
}
}
private class ContaNegativa implements EstadoDaConta {
@Override
public void sacarDa(Conta conta, double valorSaque) {
throw new RuntimeException("Conta negativa, não permitido realizar saques!");
}
@Override
public void depositarNa(Conta conta, double valorDeposito) {
conta.saldo += valorDeposito * 0.95;
if (conta.saldo > 0) {
conta.estadoAtual = new ContaPositiva();
}
}
}
}