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]
Download

BehavioralPatterns