Event Bus e padrão Observer em Java: guia com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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() {

Recommendations