BrunoSoaresE / ObserverPatternExemplo

Exemplo de Decorator Pattern

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Observer Pattern

O Observer é um padrão de projeto que permite que você defina um mecanismo de assinatura para notificar múltiplos objetos sobre quaisquer eventos que aconteçam com o objeto que eles estão observando. Permite que objetos interessados sejam avisados da mudança de estado ou outros eventos ocorrendo num outro objeto. O padrão Observer é também chamado de Publisher-Subscriber, Event Generator e Dependents.


Aplicabilidade

O padrão Observer pode ser usado quando mudanças no estado de um objeto podem precisar mudar outros objetos, e o atual conjunto de objetos é desconhecido de antemão ou muda dinamicamente.

O padrão Observer permite que qualquer objeto que implemente a interface do assinante(observer) possa se inscrever para notificações de eventos em objetos da publicadora(subject). Você pode adicionar o mecanismo de inscrição em seus botões, permitindo que o cliente coloque seu próprio código através de classes assinantes customizadas.


Problema

Imagine que você tem dois tipos de objetos: uma agência de notícias e uma estação meteorológica. A agência sempre está interessada em saber/informar a temperatura da cidade.

A agência, pode verificar a todo momento com a estação meteorológica se houve alteração na temperatura. Mas nem sempre a temperatura muda e essa checagem seria em vão.

Por outro lado, a estação meteorológica poderia mandar milhares de emails para todas as agências cada vez que houvesse uma alteração na temperatura. Isso salvaria algumas agências de incontáveis requisições. Porém, ao mesmo tempo, irritaria outras agências que não estão interessadas em saber a temperatura. Parece que temos um conflito. Ou a agência gasta tempo verificando se houve alteração na temperatura ou a estação meteorológica gasta recursos notificando as agências erradas.


Solução/ Exemplo

O objeto que tem um estado interessante é quase sempre chamado de sujeito. Todos os outros objetos que querem saber das mudanças do estado do sujeito são chamados de assinantes(Observer).

O padrão Observer sugere que você adicione um mecanismo de assinatura para a classe publicadora para que objetos individuais possam assinar ou desassinar uma corrente de eventos vindo daquela publicadora. Os observadores devem conhecer o objeto de interesse utilizando a mesma interface.

Assim, todas as agências que desejam saber a temperatura da cidade, pedem para que a estação meteorológica às informe dessas mudanças.

image

Agora, sempre que um evento importante acontece com a subject, ele passa para seus assinantes(observers) e chama um método específico de notificação em seus objetos. O objeto de interesse (sujeito) deve notificar os observadores quando for atualizado.

Assim, quando houver alguma mudança na temperatura da cidade, a estação meteorológica ira informar a mudança para todas as agencias que assinaram(observers) image

Prós
  • Princípio aberto/fechado. Você pode introduzir novas classes assinantes sem ter que mudar o código da publicadora (e vice versa se existe uma interface publicadora).
  • Você pode estabelecer relações entre objetos durante a execução.
Contras
  • Assinantes são notificados em ordem aleatória
Referências

About

Exemplo de Decorator Pattern


Languages

Language:C# 100.0%