O documento descreve o padrão Observer, no qual um objeto (sujeito) notifica automaticamente outros objetos (observadores) quando seu estado muda. O padrão permite que os objetos sejam acoplados fraca e reutilizados independentemente. Um exemplo é uma sirene que notifica funcionários sobre mudanças de estado como intervalos ou fim do expediente.
2. “O padrão Observer define uma dependência um-
para-muitos entre objetos para que, quando um
objeto mudar de estado, todos os seus dependentes
sejam notificados e atualizados automaticamente”.
(ROCHA, 2003).
• Padrão muito comum, recebendo ainda os
nomes de Dependents e Publish-Subscribe.
4. Pequeno parênteses: Padrão MVC
• Tem como objetivo separar a lógica de
negócio da lógica de apresentação,
permitindo que possam ser desenvolvidos e
testados separadamente.
• É um dos chamados “padrões compostos”,
pois é a junção de três outros padrões:
Strategy Pattern
Observer Pattern
Composite Pattern
5. Motivação
• Um objeto que possua agregações deve permitir
que seus elementos sejam acessados sem que
sua estrutura interna seja exposta.
6. Os objetos-chave neste padrão são:
• Subject (assunto)
• Observer (observador)
Subject pode ter um número qualquer de
observadores dependentes.
É o publicador de notificações.
7. Aplicabilidade
1. Quando uma abstração apresenta dois aspectos,
um dependente do outro. Encapsulando estes
aspectos em objetos separados permite que você
os varie e reutilize de forma independente;
2. Quando uma modificação em um objeto requer
modificação em outros, e você não sabe (em tempo
de programação) quantos objetos precisam ser
modificados;
3. Quando um objeto deve ser apto a notificar outros
objetos sem saber quem são estes objetos. Em
outras palavras, quando você os quer fracamente
acoplados.
8.
9. Exemplo
Uma contrução onde existem vários operários;
Uma sirene toca informando uma mudança de estado…
O alarme da sirene é uma mensagem enviada aos observadores
(Funcionários), que pode ser um intervalo, término do expediente, etc.
10. Como implementar?
• 1) Identificar os objetos que desejam ser
notificados – OBSERVADORES
• 2) Todos devem obedecer à mesma interface
11. • 3) O observador deve saber o que observar. O
observado não precisa saber quem observa.
Para isso, os observadores registram-se no
observado.
Notificar varre
a lista de
• -Adicionar(); observadores
• -Remover();
• -Notificar();
• -Atualizar();
12.
13.
14.
15.
16. Vantagens
• Tanto observadores quando sujeitos observados
podem ser reutilizados e ter sua interface e
implementação alteradas sem afetar o sistema.
• O acoplamento forte é reduzido com o uso
de interfaces e classes abstratas.
17. Desvantagens
• O abuso pode causar sério impacto na
performance. Sistemas onde todos
notificam todos a cada mudança ficam
inundados de requisições.