Padrões Comportamentais Preocupam-se com algoritmos e a atribuição de responsabilidades entre objetos. Descrevem padrões de comunicação entre os objetos. Padrão Chain of Responsability Intenção Evita o acoplamento do remetente de uma solicitação ao seu receptor, ao dar a mais de um objeto a oportunidade de tratar uma solicitação. Encadeia os objetos receptores, passando a solicitação ao longo da cadeia até que um objeto a trate. Motivação Help sensível ao contexto: O usuário pode obter ajuda em qualquer parte da interface simplesmente pressionando o botão do mouse sobre ela. A ajuda depende da parte selecionada e do seu contexto. Padrões Criacionais de Design OO. Java Deployment Course. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected] Chain of Responsability Estrutura do Padrão client Handler HandleRequest() ConcreteHandler1 HandleRequest() sucessor ConcreteHandler2 HandleRequest() Padrões Criacionais de Design OO. Java Deployment Course. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected] Chain of Responsability Participantes Handler Define uma interface para tratar solicitações. Implementa o elo ao sucessor. ConcreteHandler Trata de solicitações pelas quais é responsável. Pode acessar o seu sucessor. Se o ConcreteHandler pode tratar a solicitação, ele o faz; caso contrário, ele a repassa para o seu sucessor. Client Inicia a solicitação para um objeto ConcreteHandler da cadeia. Padrões Criacionais de Design OO. Java Deployment Course. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected] Chain of Responsability Aplicabilidade Use o Padrão Chain of Responsability quando: Mais de um objeto pode tratar uma solicitação e o objeto que a tratará não é conhecido a priori. O objeto que trata a solicitação deve ser escolhido automaticamente; Você quer emitir uma solicitação para um dentre vários objetos, sem especificar explicitamente o receptor; O conjunto de objetos que pode tratar uma solicitação deve ser especificado dinamicamente. Padrões Criacionais de Design OO. Java Deployment Course. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected] Chain of Responsability Colaborações Quando um cliente emite uma solicitação, a mesma se propaga ao longo da cadeia até que um objeto ConcreteHandler assume a responsabilidade de tratá-la. Padrões Criacionais de Design OO. Java Deployment Course. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected] Chain of Responsability Conseqüências Acoplamento reduzido entre cliente e receptor Flexibilidade na atribuição de responsabilidades a objetos. A cadeia pode ser modificada em tempo de execução A solicitação não é garantida de ser tratada Padrões Criacionais de Design OO. Java Deployment Course. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected] Padrão Observer Intenção Definir uma dependência um-para-muitos entre objetos, de maneira que quando um objeto muda o seu estado todos os seus dependentes são notificados e atualizados automaticamente. Motivação Separação das classes de apresentação das classes de aplicação (ex: visualizadores para C e Java de árvores sintáticas) Padrões Criacionais de Design OO. Java Deployment Course. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected] Padrão Observer Estrutura Subject Attach(Observer) Dettach(Observer) Notify() ConcreteSubject GetState() SetState() subjectState observers Observer Update() For all o in observers { o.Update } subject return subjectState; ConcreteObserver Update() observerState observerState = subject.GetState; Padrões Criacionais de Design OO. Java Deployment Course. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected] Padrão Observer Participantes Subject Conhece os seus observadores. Um número qualquer de objetos Observer pode observar um subject. Fornece uma interface para acrescentar e remover objetos observers. Observer Define uma interface de atualização para objetos que devem ser notificados sobre mudanças em um Subject. ConcreteSubject Armazena estados de interesse para objetos ConcreteObserver. Envia uma notificação para os seus observadores quando seu estado muda. Padrões Criacionais de Design OO. Java Deployment Course. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected] Padrão Observer Participantes ConcreteObserver Mantém uma referência para um objeto ConcreteSubject. Armazena estados que devem permanecer consistentes com os do Subject. Implementa a interface de atualização de Observer, para manter seu estado consistente com o do subject. Padrões Criacionais de Design OO. Java Deployment Course. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected] Padrão Observer Colaborações O ConcreteSubject notifica seus observadores sempre que ocorrer uma mudança que pode tornar inconsistente o estado deles com o seu próprio. Após ter sido informado de uma mudança no subject concreto, um objeto ConcreteObserver pode consultar o subject para obter informações. O ConcreteObserver usa esta informação para reconciliar o seu estado com aquele do subject. Padrões Criacionais de Design OO. Java Deployment Course. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected] Padrão Observer Aplicabilidade Quando uma abstração tem dois aspectos, um dependente do outro. Encapsulando esses aspectos em objetos separados, permite-se variá-los e reutilizá-los independentemente. Quando uma mudança em um objeto exige mudanças em outros, e você não sabe quantos objetos necessitam ser mudados. Padrões Criacionais de Design OO. Java Deployment Course. Recife, DI-UFPE, Maio de 1999. Jorge H. C. Fernandes. [email protected]