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() { También en la biblioteca
ts-mockito para TypeScript: guía completa con ejemplos
Configuración de aplicaciones Node.js: mejores herramientas y enfoques