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

Dúvida no Ex. 5 da Aula 4 - Códigos parecidos e o Template Method

Olá, boa noite.

Teriam como mostrar um exemplo da aplicação do Template Method junto com o Chain of Responsibility? Neste Execício o professor informa que é possível, porém não consegui ver os dois funcionando em conjunto que iria "fazer o programador escrever menos código". Poderiam demonstrar a junção dos dois padrões por favor.

Desde já agradeço.

Bruno Abud

2 respostas
solução!

Oi Bruno,

no Chain of Responsibility normalmente tem um "if" para testar o que devemos aplicar essa cadeia. Se for verdadeiro faz, por exemplo algum calculo (aplica alguma regra), e se for falso continua com a próxima cadeia.

Por exemplo,

class Desconto500Reais implements IDesconto {
        private $proximoDesconto;
        public function setProximo(IDesconto $proximo) {
          $this->proximo = $proximo;
        }
        public function desconta(Orcamento $orcamento) {
          if($orcamento->getValor() > 500) {
            return $orcamento->getValor() * 0.07;
          }
          else {
            return $this->proximoDesconto->desconta($orcamento);
          }
        }
      }

Esse if se repete em todas as cadeias, o que muda é a condição do if, nesse exemplo: $orcamento->getValor() > 500 e a regra em si:$orcamento->getValor() * 0.07.

Sabendo disso podemos criar um Template que já faz o if pra gente. Nas filhas desse template vamos definir dois métodos, o primeiro para implementar a condição (poderia se chamar aceita()) e a regra (calculaDesconto()).

Não coloquei a implementação aqui, se tiver com mais dúvidas, é só perguntar.

abs

Oi Bruno como você não comentou mais acredito que a resposta do nico te atendeu, estou marcando como solucionado beleza ?