O Padrão Observer
27
2 O Padrão Observer
Não deixe de saber quando algo interessante
acontece! Temos um padrão que mantém seus objetos
atualizados quando algo importante ocorre. O objeto pode
até decidir no tempo de execução se deseja ser mantido
informado. O Padrão Observer é um dos mais usados
no JDK e é incrivelmente útil. Antes de terminar, também
iremos analisar relações um-para-muitos e ligações leves
(é isso mesmo, dissemos ligações). Com o Observer, você
terá a vida da Festa dos Padrões.
Parabéns!
Ei, Jerry! Estou avisando a todo
mundo que a reunião do Grupo
de Padrões mudou para sábado
à noite. Iremos falar sobre o
Padrão Observer. Esse padrão é
o melhor! É o MELHOR, Jerry!
Mantendo seus objetos
atualizados
CG_ucpadroes_RI2016.indb 27 22/11/2016 09:36:08
Use a Cabeça Padrões de Projetos
28
Sua equipe acaba de ganhar o contrato para construir a próxima
geração de Weather-O-Rama, Inc., a Estação Meteorológica
Baseada na Internet.
Visão geral do aplicativo Weather Monitoring
Os três jogadores no sistema são a estação meteorológica (o dispositivo físico que adquire os dados meteorológicos reais), o objeto
WeatherData (que monitora os dados vindos da Estação Meteorológica e atualiza as exibições) e o visor que mostra aos usuários as
condições meteorológicas atuais.
Weather-O-Rama, Inc.
100 Main Street
Tornado Alley, OK 45021
Declaração de trabalho
Parabéns por ter sido selecionado para construir nossa Estação
Meteorológica Baseada na Internet de próxima geração!
A estação meteorológica será baseada em nosso objeto WeatherData de
patente pendente, que monitora condições atuais do tempo (temperatura,
umidade e pressão barométrica). Gostaríamos que você criasse um aplicativo
que fornecesse inicialmente três elementos de exibição: condições atuais,
estatísticas meteorológicas e uma simples previsão, todos atualizados em
tempo real à medida que o objeto WeatherData adquirir as medições mais
recentes.
Além disso, essa será uma estação meteorológica expansível. Weather-
O-Rama deseja lançar uma API para que outros desenvolvedores possam
escrever seus próprios visores meteorológicos e os conectem. Gostaríamos
que você fornecesse essa API!
Weather-O-Rama acredita que temos um excelente modelo de negócio:
depois que os clientes forem conquistados, pretendemos cobrar deles
cada visualização que zerem. Agora, a melhor parte: iremos pagá-lo em
opções de ação.
Estamos ansiosos para ver seu projeto e seu aplicativo alfa.
Atenciosamente,
Johnny Furacão
Johnny Furacão, Presidente
OBS: Enviaremos os arquivos de origem WeatherData durante a noite para você.
Objeto
WeatherData
Estação
Meteorológica
Dispositivo do
sensor de umidade
Dispositivo do sensor
de temperatura
Dispositivo do sensor
de pressão
Weather-O-Rama fornece O que implementamos
puxa dados
exibe
Dispositivo de exibição
Condições Atuais é uma das três visualizações
diferentes. O usuário também pode ver o status
meteorológico e uma previsão.
Condições atuais
Temperatura: 72°
Umidade: 60
Pressão:
CG_ucpadroes_RI2016.indb 28 22/11/2016 09:36:08
O Padrão Observer
29
O objeto WeatherData sabe como falar com a Estação Meteorológica física para obter dados atualizados. Depois, WeatherData
atualiza suas visualizações para os três elementos de exibição diferentes: Condições Atuais (mostrar temperatura, umidade e pres-
são), Estatísticas Meteorológicas e uma simples previsão.
Nossa tarefa, se optarmos por aceitá-la, é criar um aplicativo que utilize o objeto WeatherData
para atualizar três exibições de condições atuais, status meteorológico e uma previsão.
Desempacotando a classe WeatherData
Conforme prometido, na manhã seguinte os arquivos de origem WeatherData chegam. Dentro do código, as coisas parecem bem
diretas:
getTemperature()
getHumidity()
getPressure()
measurementsChanged()
WeatherData
//outros métodos
/*
* Este método começa chamando
* sempre que as medidas
* meteorológicas forem recentes
*/
public void measurementsChanged() {
// seu código aqui
}
WeatherData.java
Dispositivo de exibição
Esses três métodos retornam as medidas
meteorológicas mais recentes para
temperatura, umidade e pressão barométrica,
respectivamente.
Não importa COMO essas variáveis são
definidas; o objeto WeatherData sabe como
obter informações atualizadas da Estação
Meteorológica.
Os desenvolvedores do objeto
WeatherData deixaram uma dica do
que precisamos adicionar...
Lembre-se: Condições Atuais é apenas
UMA das três telas de exibição diferentes.
Nossa tarefa é implementar measurementsChanged()
de modo que atualize as três exibições para
condições atuais, status meteorológico e previsão.
Condições
atuais
Temperatura: 72°
Umidade: 60
Pressão:
CG_ucpadroes_RI2016.indb 29 22/11/2016 09:36:08
Get Use A Cabeça Padrões E Projetos now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.