Salve pessoal, fiquei com um pouco de dúvida entre a diferença desses dois padrões (decorator e chain of responsability). Eles me pareceram exatamente a mesma coisa. Estou completamente errado? Um abraço.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Salve pessoal, fiquei com um pouco de dúvida entre a diferença desses dois padrões (decorator e chain of responsability). Eles me pareceram exatamente a mesma coisa. Estou completamente errado? Um abraço.
Oi Claudio,
Pense no Decorator como "adicionando" a alguma coisa, enquanto Chain of Responsiblity é mais como lidar com alguma coisa. Ao comparar os dois padrões a maior diferença é que o Chain of Responsiblity pode matar a cadeia em qualquer ponto. Pense nos Decorators como uma unidade em camadas na qual cada camada sempre faz o pré / pós processamento. Chain of Responsibility é mais como uma lista vinculada e, geralmente, 1 coisa lida com o processamento. O padrão Chain of Responsibility permite que várias coisas tratem de um evento, mas também lhes dá a oportunidade de encerrar a cadeia a qualquer momento.
Cenário: Pense em uma solicitação de serviço (normalmente acesso de administrador ao seu laptop), que precisa ser aprovada por seu gerente, diretor e vice-presidente. Nesse caso, o padrão Decorator atuaria como se em cada nível houvesse apenas comentários de cada um deles e, finalmente, você obteria uma saída. Então, o gerente diria 'Aprovado e encaminhado', diretor 'Ok, aprovado e encaminhado' e, finalmente, o VP 'Aprovado'. E seu resultado final seria a combinação de todos os 3 comentários.
Observação: a corrente não vai quebrar, não importa se sua solicitação foi aprovada ou Reprovada.
Na Cadeia de responsabilidades, em cada estágio a pessoa individual tem autoridade para aprovar ou rejeitar. E se em qualquer nível a solicitação for rejeitada, então sua solicitação não segue para o próximo nível, em vez disso, apenas termina com o resultado. Espero que isto ajude :)