El patrón Mediador es un patrón de diseño de comportamiento que te permite reducir las dependencias caóticas entre objetos. Este patrón restringe las comunicaciones directas entre los objetos y los obliga a colaborar solo a través de un objeto mediador.

¿Qué problema resuelve el patrón mediador?

Un ejemplo de aplicación para el patrón mediator podría ser una aplicación con un cuadro de diálogo para crear y editar perfiles de usuario. Este cuadro de diálogo consiste en varios controles de formulario.

Las relaciones entre los elementos de la interfaz de usuario pueden volverse caóticas a medida que tu aplicación evoluciona, pues algunos de los elementos del formulario pueden interactuar con otros.

El botón de enviar tiene que validar los valores de todos los campos antes de guardar los datos, por ejemplo.

Implementar la lógica directamente dentro del código de los elementos del formulario hace que las clases de estos elementos sean más difíciles de reutilizar.

El patrón Mediador sugiere que debes cesar toda comunicación directa entre los componentes que deseas independizar.

Estos componentes deben colaborar indirectamente llamando a un objeto mediador especial que redirige las llamadas a los componentes apropiados. De esta forma los componentes dependen solo de una clase de mediadores envés de estar acoplados a múltiples clases de otros componentes.

¿Cuándo usar el patrón mediador?

Deberías utilizar el patrón Mediador cuando sea difícil cambiar algunas de las clases porque están estrechamente acopladas a un montón de otras clases. Este patrón te permite extraer todas las relaciones entre clases en una clase separada.

También podrías utilizar el patrón cuando no puedas reutilizar un componente en un programa diferente porque depende demasiado de otros componentes. Aplicando el Mediador, los componentes individuales no se dan cuenta de los otros componentes.

Y por último, usa el mediador cuanto te encuentres creando demasiadas subclases de componentes solo para reutilizar algunos comportamientos básicos en varios contextos.

Todas las relaciones entre los componentes están contenidas dentro del mediador, por lo tanto es fácil definir formas completamente nuevas para que estos componentes colaboren mediante la introducción de nuevas clases de mediadores.

Pros y contras del patrón mediador

Los siguientes son algunos de los “pros y cons” de este patrón.

Pros

Contras

  • Principio de responsabilidad única. Puedes extraer las comunicaciones entre varios componentes en un solo lugar, lo que facilita su comprensión y mantenimiento. 

  • Principio abierto/cerrado. Puedes introducir nuevos mediadores sin tener que cambiar los componentes reales

  • Puedes reducir el acoplamiento entre varios componentes de un programa

  • Puedes reutilizar componentes individuales de forma fácil

  • Con el tiempo, un mediador puede evolucionar hasta convertirse en un Objeto de Dios.

“Show me the code”

El patrón Mediador es un patrón relativamente complejo y nada popular en PHP. De hecho, la implementación pura de este patrón es poco común en PHP.

Lo es, especialmente a lenguajes orientados a GUI como JAVA o C#. Una aplicación de PHP puede contener diversos componentes, pero rara vez se comunican directamente dentro de una sola sesión.

Los despachadores de eventos de muchos frameworks de PHP serían un ejemplo de uso.

Si quieres tener una mejor idea de cómo se ve el patrón Mediador, puedes ver un ejemplo en el refactoring.guru.

En el ejemplo del “mundo real” podrás ver cómo este patrón amplía la idea del patrón Observador al proporcionar un despachador de eventos centralizado. Cualquier objeto puede rastrear y activar eventos en otros objetos sin depender de sus clases.

¿Utilizas el patrón Mediator en tus proyectos? ¿Qué tal la experiencia? ¡Coméntalo abajo!

Fuentes:

Compartir es construir