Come usare il modello di progettazione mediatore in C #

I modelli di progettazione vengono utilizzati per risolvere problemi di progettazione comuni e ridurre le complessità del nostro codice. Il modello mediatore è un modello di progettazione comportamentale che promuove l'accoppiamento libero tra gli oggetti e aiuta a organizzare il codice per le comunicazioni tra oggetti.

Questo articolo presenta una discussione sul modello di progettazione del mediatore e su come può essere implementato usando C #.

Qual è il modello di progettazione del mediatore? 

Immagina un'applicazione in cui sono presenti molti oggetti che comunicano tra loro. Il modello di progettazione del mediatore è utile quando il numero di oggetti cresce così grande che diventa difficile mantenere i riferimenti agli oggetti. Il mediatore è essenzialmente un oggetto che incapsula il modo in cui uno o più oggetti interagiscono tra loro. Il modello di progettazione del mediatore controlla il modo in cui questi oggetti comunicano e aiuta a ridurre il numero di dipendenze tra di loro che è necessario gestire.

Nel modello di progettazione del mediatore, gli oggetti non comunicano tra loro direttamente ma attraverso il mediatore. Quando un oggetto ha bisogno di comunicare con un altro oggetto o un insieme di oggetti, trasmette il messaggio al mediatore. Il mediatore trasmette quindi il messaggio a ciascun oggetto ricevente in una forma che gli sia comprensibile.

Eliminando la comunicazione diretta tra gli oggetti, il modello di progettazione del mediatore promuove l'accoppiamento libero. L'altro vantaggio dell'utilizzo del modello di progettazione del mediatore è che migliora la leggibilità e la manutenibilità del codice. Per buona misura, ecco la definizione ufficiale di Gang of Four del modello di mediatore:

Definisci un oggetto che incapsuli il modo in cui interagisce un insieme di oggetti. Mediator promuove l'accoppiamento libero impedendo agli oggetti di riferirsi esplicitamente l'uno all'altro e ti consente di variare la loro interazione in modo indipendente.

Si noti che il modello di progettazione del mediatore differisce dal modello di progettazione della facciata. Il modello mediatore facilita il modo in cui un insieme di oggetti interagisce, mentre il modello di facciata fornisce semplicemente un'interfaccia unificata a un insieme di interfacce nell'applicazione. Quindi il modello mediatore è un modello di comportamento che si occupa del comportamento dell'oggetto, il modello di facciata è un modello strutturale che si occupa della composizione dell'oggetto.

Implementing the mediator design pattern in C #

Ma basta con i concetti: entriamo nel codice. I partecipanti a questo progetto sono il mediatore, il mediatore concreto e uno o più tipi di partecipanti. Mentre il mediatore è responsabile della definizione dell'interfaccia per la comunicazione con i partecipanti, il mediatore concreto, come suggerisce il nome, implementa l'interfaccia del mediatore e conosce i partecipanti. Tieni presente che il tipo di partecipante a volte viene chiamato collega. Quindi, in alcune implementazioni, hai tipi di colleghi e colleghi concreti.

Fare ora riferimento alla seguente interfaccia. Questa è l'interfaccia per il mediatore che useremo in questo esempio.

interfaccia pubblica Imediator

    {

        void AddParticipant (IParticipant participant);

        void BroadcastMessage (stringa messaggio, IParticipant mittente);

    }

Notare che questa interfaccia contiene la dichiarazione di due metodi AddParticipant e  BroadcastMessage. Mentre il primo viene utilizzato per aggiungere partecipanti a un elenco di partecipanti gestito dalla  ConcreteMediator classe (indicato di seguito), il secondo viene utilizzato per trasmettere messaggi all'elenco dei partecipanti.

Ecco la  ConcreteMediator classe. Implementa l'  IMediator interfaccia. Lascio l'implementazione del  BroadcastMessage metodo da compilare.

classe pubblica ConcreteMediator: Imediator

    {

        Elenco partecipanti = nuovo Elenco ();

        public void AddParticipant (IParticipant participant)

        {

            partecipanti. Aggiungi (partecipante);

        }

        public void BroadcastMessage (messaggio stringa, IP partecipante mittente)

        {

            // Scrivi qui il codice per trasmettere il messaggio ai partecipanti

        }

    }

L' IParticipantinterfaccia contiene la dichiarazione del  SendMessage metodo.

interfaccia pubblica Iparticipant

    {

        void SendMessage (messaggio di stringa);

    }

Ecco un esempio delle classi partecipanti concrete. Notare che queste classi implementano l'  IParticipant interfaccia.

classe pubblica ConcreteParticipant1: Iparticipant

    {

        mediatore IMediator protetto;

        public ConcreteParticipant1 (IMediator mediator)

        {

            this.mediator = mediator;

        }

        public void SendMessage (messaggio di stringa)

        {

            mediator.SendMessage (message, this);

        }

    }

    classe pubblica ConcreteParticipant2: Iparticipant

    {

        mediatore IMediator protetto;

        public ConcreteParticipant2 (IMediator mediator)

        {

            this.mediator = mediator;

        }

        public void SendMessage (messaggio di stringa)

        {

            mediator.SendMessage (message, this);

        }

    }

E questo è tutto! Il seguente frammento di codice mostra come utilizzare tutti i tipi che abbiamo creato finora.

static void Main (string [] args)

    {

        IMediator mediator = new ConcreteMediator ();

        IParticipant participant1 = new ConcreteParticipant1 (mediatore);

        IParticipant participant2 = new ConcreteParticipant2 (mediatore);

        mediator.AddParticipant (participant1);

        mediator.AddParticipant (participant2);

        participant1.SendMessage ("Questo è il primo partecipante");

        participant2.SendMessage ("Questo è il secondo partecipante");

        Console.ReadLine ();

    }

Il modello di progettazione del mediatore è un modello comportamentale che promuove l'accoppiamento libero mediando le comunicazioni tra oggetti disparati. Poiché il mediatore facilita tutte le interazioni tra gli oggetti, questi possono essere modificati a piacimento. Soprattutto, non hanno bisogno di conoscersi l'uno dell'altro. Pertanto, il modello mediatore ti aiuta a scrivere codice ben strutturato, gestibile e facilmente verificabile.