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.

Relacionados

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com