Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Indo um pouco além...

Tudo bem Flávio?

Eu resolvi dar mais uma incrementada em nossas classes de cálculo de imposto, pois estava incomodado de ter que lembrar de somar o imposto do decorador ao imposto da classe em questão todas as vezes, então fiz o seguinte:

em Imposto criei o estrategia_calculo_imposto que irar fazer o cálculo do imposto em questão, e em seguida o somei ao cálculo do imposto recebido como decorador(caso exita claro)

class Imposto(object):

    __metaclass__ = ABCMeta

    def __init__(self, outro_inposto = None):
        self.__outro_inposto = outro_inposto

    def calcula(self, orcamento):
        if(self.__outro_imposto is None):
            return self.estrategia_calculo_imposto(orcamento) #retornamos a estrategia de cálculo

        return self.estrategia_calculo_imposto(orcamento) + self.__outro_inposto.calcula(orcamento)


        @abstractclassmethod
        def estrategia_calculo_imposto(self, orcamento):
            pass

Agora, a classe ICMS por exemplo que herda de Imposto, nao precisa declarar o calcula de forma concreta, ele será substituido pela estrategia_calculo_imposto,

class ICMS(Imposto):
    def estrategia_calculo_imposto(self, orcamento):
        return orcamento.valor *0.1
3 respostas

Olá Jefferson, blz?

Gostei da sua implementação, dessa forma não precisamos mais ficar controlando as somas dos impostos.

Parabéns!

solução!

Excelente mesmo! Obrigado por conpartilhar.

Pessoal,

Minha impressão é que o Jefferson usou nesta solução não é um Strategy, mas algum outro DP.

Alguém consegue confirmar se estou certo ou não?

TIA,

WB::