Event Bus e padrão Observer em Java
Aplicações modernas são cada vez mais construídas sobre arquitetura orientada a eventos. Duas ferramentas-chave para implementar esse modelo em Java são o padrão Observer e sua evolução — o Event Bus (barramento de eventos). Neste artigo, vamos analisar como eles diferem, como implementar cada um e quais bibliotecas podem ajudar a simplificar o desenvolvimento.
O que é o padrão Observer?
O padrão Observer (Observador) é um padrão de projeto comportamental no qual um objeto (sujeito) notifica vários objetos dependentes (observadores) sobre mudanças em seu estado. Em Java, esse padrão é frequentemente usado em interfaces gráficas, sistemas de registro e processamento de eventos.
Componentes-chave:
- Subject — fonte de eventos, gerencia a lista de observadores
- Observer — interface que todos os assinantes implementam
- ConcreteSubject — implementação concreta do sujeito
- ConcreteObserver — observador concreto
Exemplo de implementação em Java puro:
// Interface do observadorinterface Observer { void update(String event);}
// Interface do sujeitointerface Subject { void attach(Observer observer); void detach(Observer observer); void notifyObservers(String event);}
// Sujeito concretoclass EventManager implements Subject { private List<Observer> observers = new ArrayList<>(); @Override public void attach(Observer observer) { observers.add(observer); } @Override public void detach(Observer observer) { observers.remove(observer); } @Override public void notifyObservers(String event) { for (Observer observer : observers) { observer.update(event); } } public void fireEvent(String event) { System.out.println("Evento: " + event); notifyObservers(event); }}
// Observador concretoclass LogObserver implements Observer { @Override public void update(String event) { System.out.println("Log: evento recebido - " + event); }}
// Usopublic class ObserverDemo { public static void main(String[] args) { EventManager manager = new EventManager(); manager.attach(new LogObserver()); manager.fireEvent("Usuário fez login no sistema"); }}O que é Event Bus?
Event Bus (barramento de eventos) é um mecanismo centralizado de troca de mensagens entre componentes da aplicação. Diferente do Observer clássico, onde o sujeito gerencia diretamente os assinantes, o Event Bus separa remetentes e destinatários de eventos por meio de um barramento comum.
Vantagens do Event Bus:
- Baixo acoplamento entre componentes
- Assinatura e publicação simplificadas
- Suporte a filtragem de eventos por tipo
- Processamento assíncrono (opcional)
Biblioteca Guava EventBus
O Google Guava fornece uma implementação poderosa do Event Bus. Ela é amplamente utilizada em projetos industriais e é simples de integrar.
Configuração Maven:
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>33.0.0-jre</version></dependency>Exemplo de uso:
import com.google.common.eventbus.EventBus;import com.google.common.eventbus.Subscribe;
// Classe de eventoclass UserLoginEvent { private final String username; public UserLoginEvent(String username) { this.username = username; } public String getUsername() { Também na biblioteca
Autorização e Autenticação em Go (Golang): Guia Completo
Validação de dados em Java: visão geral de ferramentas e bibliotecas
Guia completo Ramsey/UUID para PHP: instalação e exemplos
Criptografia em Swift: criptografia e hash para iOS/macOS