Padrões de Projeto Chain of Responsibility Chain of Responsibility • Motivação – Desacoplar remetentes e receptores fornecendo a múltiplos objetos a oportunidade de tratar uma solicitação – Encadear os objetos receptores passando a solicitação ao longo da cadeia • Aplicabilidade – Mais de um objeto pode tratar uma solicitação e este não é conhecido – Emitir uma solicitação para um dentre vários objetos, sem especificar o receptor – O conjunto de objetos capaz de tratar a solicitação deveria ser especificado dinamicamente © LES/PUC-Rio Chain of Responsibility • Estrutura © LES/PUC-Rio Chain of Responsibility • Participantes – Handler • Define uma interface para tratar as solicitações – ConcreteHandler • Trata a solicitação pela qual é responsável • Repassa a solicitação se não couber a ele o tratamento – Client • Inicia a solicitação para um objeto ConcreteHandler da cadeia © LES/PUC-Rio Chain of Responsibility • Consequências – Acoplamento reduzido • O padrão libera um objeto de ter que conhecer qual o outro objeto que trata de uma solicitação – Flexibilidade adicional na atribuição de responsabilidade a objetos • É possível acrescentar ou mudar responsabilidades para o tratamento de uma solicitação pelo acréscimo ou mudança da cadeia em tempo de execução – A recepção não é garantida • A solicitação pode sair da cadeia sem ser tratada © LES/PUC-Rio Chain of Responsibility • Exemplo de código © LES/PUC-Rio Chain of Responsibility • Exemplo de código © LES/PUC-Rio Chain of Responsibility • Referências – Padrões de Projeto – GoF GAMMA, E.; HELM, R.; JOHNSON, R.; VLISSIDES, J..Padrões de Projeto: Soluções Reutilizáveis de Software Orientado a Objetos. Trad. Luiz A. M. Salgado. – Porto Alegre: Bookman, 2000. – Design Class Diagrams http://www.cs.ucsb.edu/~mikec/cs50/misc/Design_Class_Diagrams.htm – Chain-of-responsibility pattern http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern – Chain of Responsibility http://www.dofactory.com/Patterns/PatternChain.aspx © LES/PUC-Rio