Pensei na possibilidade de ter vários impostos de uma vez. Então alterei o código do método calcular para ficar da seguinte forma.
public BigDecimal calcular(Orcamento orcamento) {
// DESIGNER_PATTERN decorator - fiz uma alteração em relação ao código do curso para que seja possível add vários impostos
BigDecimal valorTotalImpostos = realizarCalculo(orcamento);
Imposto proximo = outro;
while(proximo != null){
valorTotalImpostos = valorTotalImpostos.add(proximo.realizarCalculo(orcamento));
proximo = proximo.outro;
}
return valorTotalImpostos;
}
Assim é possível executar algo como
calculadoraDeImpostos.calcular(orcamento, (new ISS(new ICMS(new PIS()))))
Isso está descaracterizando o padrão decorator?