Observer
Professor: Hyggo Almeida
Observer
Computação Ubíqua
Casa inteligente
Cenário não tão futurista
Software embutido
Observer
2
Minha Casa
Observer
3
Como projetar???
Usuário
vouChegar(30)
Telefone
vaiChegar(30)
Geladeira
Televisão
Microondas mic;
ArCondicionado arc;
Torradeira tor;
Computador cp;
Geladeira gel;
vaiChegar(30)
vaiChegar(30)
Microondas
ArCondicionado
Torradeira
Computador
Observer
4
Problemas!!!
Alto acoplamento
Na verdade, o acoplamento deve ser mínimo
Computador, Microondas, televisão... etc, estão
interessados apenas no EVENTO ocorrido no
telefone
Querem ser notificados quando tal EVENTO ocorrer
Observer
5
Observer
Solução:
 Padrão Observer
 Definição de dois papéis


Observado (Observable)
Observador/Ouvinte (Observer/Listener)
Observable
Avisa a todos os ouvintes interessados
quando o Evento ocorre
Observer
*
<<interface>>
Listener
Cadastra-se no observador como
interessado em um Evento
6
Observer
No nosso exemplo
TelefoneInteligente
tocar();
addListener(EletroOuvinte);
dispararEvento();
cria
anuncia
*
<<interface>>
EletroOuvinte
receiveEvent(EventoToque);
Computador
Microondas
ArCondicionado
EventoToque
getTime();
Observer
Torradeira
Geladeira
7
Observer
Intenção
 definir uma dependência um-para-muitos
entre objetos, de maneira que quando um
objeto muda de estado todos os seus
dependentes são notificados e atualizados
automaticamente.
Também conhecido como:
 Dependents e Publish-Subscribe
Observer
8
Observer
Aplicabilidade
 quando a mudança em um objeto exige a
mudança em outros, e você não sabe
quantos objetos necessitam ser mudados.
 quando um objeto deveria ser capaz de
notificar outros objetos sem fazer
hipóteses, ou usar informações, de quem
são estes objetos.
Observer
9
Observer
Conseqüências
 baixo acoplamento entre os anunciantes e
os ouvintes da notificação
 suporte para comunicações baseadas em
difusão (broadcast)
Observer
10
Questões de implementação
Listeners podem demorar a retornar da
notificação
Listeners não devem jogar exceções na
notificação
Se listeners puderem alterar o Observable na
notificação, a coisa complica
Dúvidas?
?
Observer
12
Download

13.Observer