Essa seria uma maneira válida para isso? seria errado a filha não precisar saber o número de vezes que o desconto foi efetuado?
public abstract class EstadoDeOrcamento {
private String nomeEstado;
private boolean descontoEfetuado;
protected Orcamento orcamento;
public EstadoDeOrcamento(Orcamento orcamento, String nomeEstado){
this.orcamento = orcamento;
this.nomeEstado = nomeEstado;
descontoEfetuado = false;
}
protected abstract double descontoExtra();
public abstract EstadoDeOrcamento aprova();
public abstract EstadoDeOrcamento reprova();
public abstract EstadoDeOrcamento finaliza();
public final double aplicaDescontoExtra(){
if(!descontoEfetuado) {
descontoEfetuado = true;
return descontoExtra();
}
throw new RuntimeException("Desconto já efetuado");
}
public final String getNome() {
return nomeEstado;
}
}