Patrón sub/pub

Patrón sub/pub

El patrón de diseño Publicador/Suscriptor (también conocido como Pub/Sub) es un patrón de mensajería en el cual los emisores de mensajes (publicadores) no envían mensajes directamente a receptores específicos (suscriptores). En cambio, los mensajes se categorizan en diferentes temas, y los suscriptores se suscriben a los temas de interés. Cuando un mensaje se publica en un tema, todos los suscriptores de ese tema reciben el mensaje.

Implementación del Patrón Pub/Sub en Java

A continuación, te muestro una implementación básica del patrón Pub/Sub en Java.

Paso 1: Crear la interfaz de Suscriptor

public interface Suscriptor {
    void actualizar(String mensaje);
}


Paso 2: Implementar la clase Publicador

import java.util.ArrayList;
import java.util.List;

public class Publicador {
    private List<Suscriptor> suscriptores = new ArrayList<>();

    public void suscribir(Suscriptor suscriptor) {
        suscriptores.add(suscriptor);
    }

    public void desuscribir(Suscriptor suscriptor) {
        suscriptores.remove(suscriptor);
    }

    public void notificarSuscriptores(String mensaje) {
        for (Suscriptor suscriptor : suscriptores) {
            suscriptor.actualizar(mensaje);
        }
    }

    public void publicarMensaje(String mensaje) {
        System.out.println("Publicando mensaje: " + mensaje);
        notificarSuscriptores(mensaje);
    }
}


Paso 3: Crear una clase concreta de Suscriptor

public class SuscriptorConcreto implements Suscriptor {
    private String nombre;

    public SuscriptorConcreto(String nombre) {
        this.nombre = nombre;
    }

    @Override
    public void actualizar(String mensaje) {
        System.out.println(nombre + " recibió mensaje: " + mensaje);
    }
}


Paso 4: Probar el patrón Pub/Sub

public class PubSubDemo {
    public static void main(String[] args) {
        Publicador publicador = new Publicador();

        Suscriptor suscriptor1 = new SuscriptorConcreto("Suscriptor 1");
        Suscriptor suscriptor2 = new SuscriptorConcreto("Suscriptor 2");

        publicador.suscribir(suscriptor1);
        publicador.suscribir(suscriptor2);

        publicador.publicarMensaje("Mensaje 1");

        publicador.desuscribir(suscriptor1);

        publicador.publicarMensaje("Mensaje 2");
    }
}

Explicación

1. Interfaz de Suscriptor (Suscriptor): Define un método actualizar que los suscriptores concretos deben implementar para recibir mensajes.

2. Clase Publicador (Publicador): Mantiene una lista de suscriptores y proporciona métodos para suscribir, desuscribir y notificar a los suscriptores. Cuando se publica un mensaje, se notifica a todos los suscriptores.

3. Clase concreta de Suscriptor (SuscriptorConcreto): Implementa la interfaz Suscriptor y define cómo se procesan los mensajes recibidos.

4. Clase de demostración (PubSubDemo): Demuestra cómo crear un publicador y suscriptores, suscribir y desuscribir a los suscriptores, y publicar mensajes.

Este ejemplo básico puede ser extendido para incluir más funcionalidades, como diferentes temas, filtros de mensajes, y un manejo más sofisticado de los suscriptores y los mensajes.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *