2
respostas

Como fazer o Chain of Responsability não parar à primeira condição válida?

Pelo que entendi e percebi em meus testes, o padrão Chain of Responsability, primeiro procura saber se a classe atual é a responsável pelo tratamento que eu quero dar e caso a resposta seja não, ele delega o tratamento a quem estiver registrado como seu próximo. Até aí tudo bem, mas se caso a classe deva sim tratar a "requisição" aplicando sua lógica e, em seguida, passar o trabalho para o próximo em linha? Como é possível/melhor forma de fazer isso?

Um exemplo para ilustrar seria no exemplo dos exercícios eu quisesse dar múltiplos descontos ao meu orçamento. Eu posso dar um desconto para a venda casada, e ao mesmo acumular o desconto para um orçamento superior a 500 reais. Do jeito que está implementado agora, apenas o desconto que "casar" primeiro será considerado. O fluxo da "corrente" termina, e os outros "elos" são desconsiderados.

2 respostas

É, se você quer compor regras, talvez essa não seja a melhor estratégia. O decorator encaixa mais, justamente porque você quer compor comportamentos baseado em um mesmo padrão.

oi Glayderson os padrões de projeto são definidos das formas mais genéricas possíveis para não ficarem atrelados a formas únicas de implementação, no caso do Chain perçeba a intenção do padrão:

" Evitar o acoplamento do remetente de uma solicitação ao seu receptor, ao dar a mais de um objeto a oportunidade de tratar a solicitação. Encadear os objetos receptores, passando a solicitação ao longo da cadeia até que um objeto a trate."

quando passamos uma solicitação pela cadeia não sabemos que objeto tratará essa solicitação, se no seu caso um desconto cair em mais de uma parte da cadeia não tem problema nenhum o que o padrão garante é que existe mais de um objeto capaz de tratar a solicitação mesmo. A cadeia é montada para que pelo menos um objeto trate a solicitação.Você pode passar a solicitação por toda a cadeia e verificar quem a tratou.

Espero ter ajudado e bons estudos.