Observer

Descrição:

Observer, ou observador, é um padrão de projeto que implementa o tipo de relacionamento um-para-muitos entre objetos, assim permitindo que quando um objeto sofrer alguma mudança todos os objetos que se relacionam com ele são notificados e podem ser atualizados, caso necessário.

Diagrama de Classes genérico do padrão:

Observer

Exemplo:

A ideia do exemplo apresentada no livro consiste num aplicativo de monitoramento do clima, o sistema deverá receber os dados do weather_data sobre a temperatura, a humidade e pressão baromêtrica e mostrar na tela esses dados, sendo atualizado sempre que houver mudanças e em todas as telas que usem os dados fornecidos.

No exemplo devem-se destacar as seguintes classes:

  1. subject, observer e display_element.
  2. weather_data.
  3. current_conditions, statistics_display, forecast_display e third_party_display.

As classes subject, observer e display_element são as classes abstratas que moldam como devem se comportar tanto o sujeito quanto os observadores,respectivamente, já o display_element molda como cada classe que o implementará irá mostrar os dados na tela.

A weather_data é quem implementa a classe abstrata subject e é de onde os dados que seus observadores usam para exercer suas funções, nesta relação ele é tratado como o sujeito a ser observado.

Por fim, as demais classes implementam as classe abstratas observer e display_element, e nesta relação são tratados como os observadores de weather_data.

Diagrama de Classes do exemplo:

Observer

Ver código fonte no Github