2
respostas

Dúvida Design Pattern

Olá, revisando aqui o curso Design Patterns Java I, na aula Muitos Descontos e o Chain of Responsibility (aula 2) acredito que a explicação do padrão ta um pouco equivocada em alguns exercícios da aula. (ou então eu tô equivocado haha)

Então, o exemplo usado trata de uma cadeia num estilo if if-else, o que eu acredito que não seja bem o sentido do padrão (que no caso funcionaria mais como uma sequência de if's )... tanto que a resposta de uma das questões é a seguinte:

"O padrão Chain of Responsibility cai como uma luva quando temos uma lista de comandos a serem executados de acordo com algum cenário em específico, e sabemos também qual o próximo cenário que deve ser validado, caso o anterior não satisfaça a condição."

Estou certo?

2 respostas

Oi Denis! Tudo bem?

Sim! Você está correto!

O exemplo de simplificação de IFs geralmente é utilizado para justificar uso de strategies e não chain of responsibility.

O conceito de chain of responsability é muito simples, onde se desmembra uma atividade ou processo em diversas etapas, em uma sequência lógica.

A ordem de execução de cada elo dessa corrente, em uma sequência lógica, faz com que o resultado final da atividade ou processo, seja atingido.

Um exemplo didático que eu sempre utilizo é da criança que pede aos pais para fazer algo.

Nome da Atividade: Autorização para sair

Primeiro nível: Autorização Paterna

Condição para executar: Sempre

Resultados possíveis:

  1. Pode
  2. Não Pode
  3. Pergunta Pra sua mãe

Segundo nível: Autorização Materna

Condição para executar: Resultado do primeiro nível é 3.

Resultados possíveis:

  1. Pode
  2. Não Pode
  3. Pergunta Pro seu pai.

Terceiro nível: Revalidação Paterna

Condição para executar: Resultado do primeiro nível é 3.

  1. Pode
  2. Não Pode

O final dessa cadeia seria o objetivo dessa atividade. A criança espera um simples pode ou não pode.

Outra aplicabilidade comum é cálculos de preços, impostos, descontos e afins.

Espero ter ajudado,

Abraço e sucesso,

Rodrigo

Oi Denis para demonstrar um padrão precisamos mostrar um problema de projeto que ele ataca(resolve) no vídeo começamos explicando esse cenário do problema, temos vários descontos que devem ser aplicados sucessivamente e essa quantidade de descontos tende a crescer, para demonstrar esse problema utilizamos o if else if, no entanto conforme fazemos uso dos padrões de projeto e de sua motivação vamos observando que podemos solucionar aquele problema com o padrão, passamos então a desenvolver a solução, na solução final já temos uma cadeia montada de descontos onde cada desconto tem um próximo e uma classe sem Desconto que representa o ultimo desconto da cadeia, if else if (é um detalhe de implementação) e padrões de projeto não estão presos a implementação você pode aplicar o mesmo padrão de várias maneiras diferentes. Eles são definidos genericamente para que você abstraia a aplicabilidade do padrão para seu problema.

Espero ter ajudado e bons estudos.