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
Download

Slide