Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida entre o Strategy e o Chain of Responsability

Boa tarde pessoal,

Dei uma revisitada nesse capítulo algumas vezes e ainda não consegui entender de verdade a explicação de quando devemos usar o Strategy ou o Chain of Responsability.

O professor comentou: na "CalculadoraDeImpostos" nós já sabemos qual é o imposto a ser calculado, é o ICMS, é o ISS, enfim. Aqui nós não sabemos ainda qual é o desconto a ser aplicado. Então aqui precisamos ter toda essa lógica, todo esse if e else para saber qual é o desconto que eu preciso aplicar.

Não ficou muito claro essa parte de que nós já sabemos qual o imposto a ser calculado. Eu tenho alguns tipos de impostos... ICMS, ISS, etc. Na calculadora de descontos, eu também sei os tipos de descontos que podem ser aplicados também: desconto com itens > 5, desconto com valor > 500, desconto se tiver algum tipo de produto no orçamento (por exemplo). E esses tipos de descontos também variam de acordo com algum parâmetro.

Se alguém puder tentar me explicar de um outro jeito :D

1 resposta
solução!

Utilize o padrão Chain of Responsibility quando é esperado que seu programa processe diferentes tipos de pedidos em várias maneiras, mas os exatos tipos de pedidos e suas sequências são desconhecidos de antemão.

Utilize o padrão Strategy quando você quer usar diferentes variantes de um algoritmo dentro de um objeto e ser capaz de trocar de um algoritmo para outro durante a execução.

Resumo:

Pense no padrão Chain of Responsibility como etapas de processamento. Cada objeto da cadeia faz um tratamento específico. Por exemplo do caso de requisiões para tratamentos de erros, serialização de objetos, validações. Pensando assim, a requisão é passada para cada etapa que fará o tratamento específico.

No Strategy, será aplicado uma variante do algoritmo sobre o objeto passado. Observe que precisa de uma única logica para chamar a variação do algoritmo.

Até poderia implementar a calculadora com o Chain of Responsibility, mas ficaria fora de escopo, adicionando mais complexidade, e custo de manutenção. Enfim, seria uma escolha equivocada.

  1. https://refactoring.guru/pt-br/design-patterns/chain-of-responsibility
  2. https://refactoring.guru/pt-br/design-patterns/strategy