Cómo usar el patrón de diseño de mediador en C #

Los patrones de diseño se utilizan para resolver problemas de diseño comunes y reducir las complejidades de nuestro código. El patrón de mediador es un patrón de diseño de comportamiento que promueve un acoplamiento flexible entre objetos y ayuda a organizar el código para las comunicaciones entre objetos.

Este artículo presenta una discusión sobre el patrón de diseño del mediador y cómo se puede implementar con C #.

¿Qué es el patrón de diseño del mediador? 

Imagine una aplicación en la que hay muchos objetos que se comunican entre sí. El patrón de diseño del mediador es útil cuando el número de objetos crece tanto que resulta difícil mantener las referencias a los objetos. El mediador es esencialmente un objeto que encapsula cómo uno o más objetos interactúan entre sí. El patrón de diseño del mediador controla cómo se comunican estos objetos y ayuda a reducir la cantidad de dependencias entre ellos que debe administrar.

En el patrón de diseño del mediador, los objetos no se comunican entre sí directamente, sino a través del mediador. Cuando un objeto necesita comunicarse con otro objeto o un conjunto de objetos, transmite el mensaje al mediador. El mediador luego transmite el mensaje a cada objeto receptor en una forma que le sea comprensible.

Al eliminar la comunicación directa entre objetos, el patrón de diseño del mediador promueve un acoplamiento flexible. El otro beneficio de usar el patrón de diseño del mediador es que mejora la legibilidad y el mantenimiento del código. Por si acaso, aquí está la definición oficial del patrón de mediador de la Banda de los Cuatro:

Defina un objeto que encapsule cómo interactúa un conjunto de objetos. Mediator promueve el acoplamiento flexible al evitar que los objetos se refieran entre sí de forma explícita y le permite variar su interacción de forma independiente.

Tenga en cuenta que el patrón de diseño del mediador difiere del patrón de diseño de la fachada. El patrón de mediador facilita cómo interactúa un conjunto de objetos, mientras que el patrón de fachada simplemente proporciona una interfaz unificada a un conjunto de interfaces en la aplicación. Por tanto, el patrón de mediador es un patrón de comportamiento que se ocupa del comportamiento del objeto, el patrón de fachada es un patrón estructural que se ocupa de la composición del objeto.

Implementación del patrón de diseño del mediador en C #

Pero basta de conceptos, entremos en el código. Los participantes en este diseño son el mediador, el mediador concreto y uno o más tipos de participantes. Mientras que el mediador es responsable de definir la interfaz para comunicarse con los participantes, el mediador concreto, como su nombre indica, implementa la interfaz de mediador y tiene conocimiento de los participantes. Tenga en cuenta que el tipo de participante a veces se denomina colega. Entonces, en algunas implementaciones, tiene tipos de colegas y colegas concretos.

Ahora, consulte la siguiente interfaz. Esta es la interfaz para el mediador que usaremos en este ejemplo.

Imediator de interfaz pública

    {

        void AddParticipant (participante IParticipant);

        void BroadcastMessage (mensaje de cadena, remitente IParticipant);

    }

Tenga en cuenta que esta interfaz contiene la declaración de dos métodos AddParticipant y  BroadcastMessage. Mientras que el primero se usa para agregar participantes a una lista de participantes que mantiene la  ConcreteMediator clase (que se muestra a continuación), el segundo se usa para transmitir mensajes a la lista de participantes.

Aquí está la  ConcreteMediator clase. Implementa la  IMediator interfaz. Dejo la implementación del  BroadcastMessage método para que la complete.

clase pública ConcreteMediator: Imediator

    {

        Lista de participantes = nueva Lista ();

        public void AddParticipant (participante IParticipant)

        {

            participantes.Añadir (participante);

        }

        public void BroadcastMessage (mensaje de cadena, remitente de IParticipant)

        {

            // Escriba aquí el código para transmitir el mensaje a los participantes

        }

    }

La IParticipantinterfaz contiene la declaración del  SendMessage método.

interfaz pública Iparticipant

    {

        void SendMessage (mensaje de cadena);

    }

Aquí hay un ejemplo de las clases de participantes concretas. Tenga en cuenta que estas clases implementan la  IParticipant interfaz.

clase pública ConcreteParticipant1: Iparticipant

    {

        mediador IMediator protegido;

        public ConcreteParticipant1 (mediador de IMediador)

        {

            this.mediator = mediador;

        }

        Public void SendMessage (mensaje de cadena)

        {

            mediator.SendMessage (mensaje, esto);

        }

    }

    clase pública ConcreteParticipant2: Iparticipant

    {

        mediador IMediator protegido;

        public ConcreteParticipant2 (mediador de IMediador)

        {

            this.mediator = mediador;

        }

        Public void SendMessage (mensaje de cadena)

        {

            mediator.SendMessage (mensaje, esto);

        }

    }

¡Y eso es! El siguiente fragmento de código muestra cómo puede utilizar todos los tipos que hemos creado hasta ahora.

static void Main (cadena [] argumentos)

    {

        Mediador IMediator = new ConcreteMediator ();

        IParticipant participant1 = new ConcreteParticipant1 (mediador);

        IParticipant participant2 = new ConcreteParticipant2 (mediador);

        mediator.AddParticipant (participant1);

        mediator.AddParticipant (participant2);

        participant1.SendMessage ("Este es el primer participante");

        participant2.SendMessage ("Este es el segundo participante");

        Console.ReadLine ();

    }

El patrón de diseño del mediador es un patrón de comportamiento que promueve un acoplamiento flexible al mediar las comunicaciones entre objetos dispares. Dado que el mediador facilita todas las interacciones entre objetos, estos objetos pueden cambiarse a voluntad. Lo más importante es que no necesitan conocerse el uno al otro. Por lo tanto, el patrón de mediador le ayuda a escribir código bien estructurado, mantenible y fácilmente comprobable.