Observer
Definição
O padrão Observer define uma relação de dependência do tipo um-para-muitos entre objetos, em que uma mudança de estado em um deles notifica automaticamente todos os seus dependentes.
Esse padrão é útil quando múltiplos componentes precisam reagir a mudanças em outro componente, sem criar um acoplamento direto entre eles.
Por que é importante
O Observer promove um sistema mais modular e desacoplado. Ele permite que objetos “observadores” se inscrevam em eventos de outro objeto “observado”, reagindo automaticamente a alterações sem que o observado precise conhecer os detalhes de quem está escutando.
Esse padrão é muito usado em interfaces gráficas, fluxos de eventos, notificações e sistemas reativos — em que alterações precisam se propagar de forma controlada.
Exemplo prático (Python)
Abaixo, um exemplo de um sistema de publicações onde observadores são notificados automaticamente ao ocorrer uma nova publicação:
from abc import ABC, abstractmethod
# Interface para observadores
class Observador(ABC):
@abstractmethod
def atualizar(self, mensagem):
pass
# Sujeito observado
class Publicador:
def __init__(self):
self.observadores = []
def adicionar(self, observador: Observador):
self.observadores.append(observador)
def remover(self, observador: Observador):
self.observadores.remove(observador)
def notificar(self, mensagem):
for obs in self.observadores:
obs.atualizar(mensagem)
# Observadores concretos
class UsuarioEmail(Observador):
def atualizar(self, mensagem):
print(f"[Email] Nova publicação: {mensagem}")
class UsuarioSMS(Observador):
def atualizar(self, mensagem):
print(f"[SMS] Nova publicação: {mensagem}")
Agora, podemos adicionar observadores ao publicador, e todos serão notificados automaticamente quando houver uma nova publicação:
pub = Publicador()
email = UsuarioEmail()
sms = UsuarioSMS()
pub.adicionar(email)
pub.adicionar(sms)
pub.notificar("Novo artigo publicado!")
O objeto Publicador
não precisa conhecer os detalhes de cada
observador. Ele apenas dispara as atualizações, e os observadores reagem
conforme sua própria lógica.