Event Bus y el patrón Observer en Java: guía con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Event Bus y el patrón Observer en Java



Las aplicaciones modernas se construyen cada vez más sobre una arquitectura orientada a eventos. Dos herramientas clave para implementar este modelo en Java son el patrón Observer y su evolución: el Event Bus (bus de eventos). En este artículo, analizaremos en qué se diferencian, cómo implementar cada uno y qué bibliotecas pueden ayudar a simplificar el desarrollo.



¿Qué es el patrón Observer?



El patrón Observer (Observador) es un patrón de diseño de comportamiento en el que un objeto (sujeto) notifica a múltiples objetos dependientes (observadores) sobre cambios en su estado. En Java, este patrón se utiliza a menudo en interfaces gráficas, sistemas de registro y manejo de eventos.



Componentes clave:

  • Subject — fuente de eventos, gestiona la lista de observadores
  • Observer — interfaz que implementan todos los suscriptores
  • ConcreteSubject — implementación concreta del sujeto
  • ConcreteObserver — observador concreto


Ejemplo de implementación en Java puro:



// Interfaz del observadorinterface Observer {    void update(String event);}

// Interfaz del sujetointerface Subject { void attach(Observer observer); void detach(Observer observer); void notifyObservers(String event);}

// Sujeto 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 recibido - " + event); }}

// Usopublic class ObserverDemo { public static void main(String[] args) { EventManager manager = new EventManager(); manager.attach(new LogObserver()); manager.fireEvent("Usuario inició sesión"); }}


¿Qué es Event Bus?



Event Bus (bus de eventos) es un mecanismo centralizado de intercambio de mensajes entre componentes de una aplicación. A diferencia del Observer clásico, donde el sujeto gestiona directamente a los suscriptores, Event Bus separa a los emisores y receptores de eventos a través de un bus común.



Ventajas de Event Bus:

  • Bajo acoplamiento entre componentes
  • Suscripción y publicación simplificadas
  • Soporte para filtrado de eventos por tipo
  • Procesamiento asíncrono (opcional)


Biblioteca Guava EventBus



Google Guava proporciona una potente implementación de Event Bus. Se utiliza ampliamente en proyectos industriales y es fácil de integrar.



Configuración Maven:

<dependency>    <groupId>com.google.guava</groupId>    <artifactId>guava</artifactId>    <version>33.0.0-jre</version></dependency>


Ejemplo de uso:



import com.google.common.eventbus.EventBus;import com.google.common.eventbus.Subscribe;

// Clase de eventoclass UserLoginEvent { private final String username; public UserLoginEvent(String username) { this.username = username; } public String getUsername() {

Recommendations