Mediator – Patrones de Diseño
Antonio Leiva

El patrón de diseño Mediator es un patrón de diseño que se utiliza para controlar la comunicación entre diferentes objetos.

Esto permite que los objetos se comuniquen de manera eficiente sin tener que depender directamente uno del otro.

Un ejemplo de un caso en el que se puede utilizar el patrón Mediator es en un sistema de chat en línea.

Los usuarios del chat pueden enviar y recibir mensajes a través del mediador, que controla la comunicación entre ellos.

De esta manera, los usuarios no tienen que conocerse directamente y pueden enviarse mensajes de manera eficiente.

En Kotlin, podemos implementar el patrón Mediator utilizando una interfaz y clases concretas para representar a los usuarios del chat y el mediador.

En este ejemplo, la interfaz User representa a los usuarios del chat, que pueden enviar y recibir mensajes.

interface User {
    fun sendMessage(message: String)
    fun receiveMessage(message: String)
}

La clase ConcreteUser implementa esta interfaz y mantiene una referencia al mediador para enviar mensajes a través de él.

class ConcreteUser(val mediator: Mediator, val name: String): User {
    override fun sendMessage(message: String) {
        mediator.sendMessage(message, this)
    }

    override fun receiveMessage(message: String) {
        println("$name recibió: $message")
    }
}

La clase Mediator, por su parte, mantiene una lista de usuarios registrados y controla la comunicación entre ellos.

class Mediator {
    private val users = mutableListOf<User>()

    fun registerUser(user: User) {
        users.add(user)
    }

    fun sendMessage(message: String, user: User) {
        users.forEach {
            if (it != user) {
                it.receiveMessage(message)
            }
        }
    }
}

Para utilizar este código, podemos crear una instancia del mediador y registrar a los usuarios en él:

val mediator = Mediator()

val user1 = ConcreteUser(mediator, "User 1")
val user2 = ConcreteUser(mediator, "User 2")

mediator.registerUser(user1)
mediator.registerUser(user2)

user1.sendMessage("Hola, ¿cómo estás?")
user2.sendMessage("Bien, ¿y tú?")

En este caso, el mediador controla la comunicación entre los usuarios y se encarga de enviar los mensajes a los destinatarios adecuados.

De esta manera, se asegura que cada usuario reciba solo los mensajes que le envían, sin tener que conocer directamente a los demás usuarios del chat.

El patrón Mediator tiene varias ventajas en comparación con otros patrones de diseño de comunicación.

  • Una de ellas es que permite controlar y centralizar la comunicación entre objetos, lo que facilita la organización y mantenimiento del código.
  • También permite que los objetos se comuniquen de manera eficiente, sin tener que establecer relaciones directas entre ellos.

En resumen, el patrón Mediator es una herramienta útil en situaciones en las que se necesita controlar y centralizar la comunicación entre objetos.

En Kotlin, se puede implementar utilizando una interfaz y clases concretas para representar a los objetos que se comunican y al mediador que controla esta comunicación.

Quizá también te interese…

Las reglas FIRST de los tests

Las reglas FIRST de los tests

Las reglas FIRST son un conjunto de principios que se utilizan para diseñar y escribir tests de software de manera efectiva. Las siglas FIRST significan: F - Fast: Un test debe ser rápido de ejecutar. I - Independent: Un test debe ser independiente de otros tests y...

¿Qué son los dobles de test?

¿Qué son los dobles de test?

Los dobles de prueba (también conocidos como "doubles" o "fakes") son herramientas comunes en la programación y en particular en el testing de software. Se utilizan para simular el comportamiento de una dependencia de una aplicación en un entorno de pruebas, sin tener...

Kata del TicTacToe en Kotlin

Kata del TicTacToe en Kotlin

Escribe el código para representar una entidad que almacene el tablero de juego del 3 en raya, y que además tenga: Un método move() con 2 parámetros, fila y columna, que permita añadir un movimiento al tablero Un método findWinner(), que devuelva el ganador (X, Y o...

0 comentarios

Enviar un comentario

Los datos personales que proporciones a través de este formulario quedarán registrados en un fichero de DevExpert, S.L.U., con el fin de gestionar los comentarios que realizas en este blog. La legitimación se realiza a través del consentimiento de la parte interesada. Si no se acepta, no podrás comentar en este blog. Los datos que proporciona solo se utilizan para evitar el correo no deseado y no se usarán para nada más. Puede ejercer los derechos de acceso, rectificación, cancelación y oposición en contacto@devexperto.com.

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

Acepto la política de privacidad *