public void aplicaDescontoExtra() { /* // PROBLEMA: Já possui vários ifs e para cada estado novo será necessário adicionar um novo if. // O método tende a crescer e fica cada vez mais complexo. if (estadoAtual == EM_APROVACAO) { valor = valor - (valor * 0.05); // Desconto de 5% caso esteja nos estado EM_APROVACAO } else if (estadoAtual == APROVADO) { valor = valor - (valor * 0.02); // Desconto de 2% caso esteja nos estado APROVADO } else { throw new RuntimeException("Somente orçamentos em aprovação ou aprovados ganham descontos."); } */ estadoAtual.aplicaDescontto(this); // Aplicar o desconto nele mesmo, no próprio orçamento. }
public void finaliza() { estadoAtual.finaliza(this); }
public void reprova() { estadoAtual.reprova(this); }
public void aprova() { estadoAtual.aprova(this); }