Kako se koristi obrazac dizajna medijatora u C #

Uzorci dizajna koriste se za rješavanje uobičajenih problema s dizajnom i smanjenje složenosti našeg koda. Uzorak medijatora je obrazac dizajna ponašanja koji potiče labavu spregu između objekata i pomaže u organiziranju koda za međusobnu komunikaciju.

Ovaj članak predstavlja raspravu o uzorku dizajna medijatora i kako ga je moguće implementirati pomoću C #.

Koji je obrazac dizajna medijatora? 

Zamislite aplikaciju u kojoj postoji mnogo objekata koji međusobno komuniciraju. Uzorak dizajna medijatora koristan je kada broj predmeta naraste toliko da postaje teško održavati reference na objekte. Posrednik je u osnovi objekt koji obuhvaća način na koji jedan ili više predmeta međusobno komuniciraju. Uzorak dizajna medijatora kontrolira način na koji ti objekti komuniciraju i pomaže smanjiti broj ovisnosti među njima kojima morate upravljati.

U uzorku dizajna medijatora, predmeti međusobno ne komuniciraju izravno, već posrednikom. Kada objekt treba komunicirati s drugim objektom ili skupom predmeta, on prenosi poruku posredniku. Posrednik zatim prenosi poruku svakom primatelju u obliku koji mu je razumljiv.

Eliminirajući izravnu komunikaciju između predmeta, obrazac dizajna medijatora potiče labavo spajanje. Druga prednost korištenja uzorka dizajna medijatora je ta što poboljšava čitljivost i održivost koda. Za dobru mjeru, evo službene definicije uzorka medijatora iz Gang of Four:

Definirajte objekt koji sadrži način interakcije skupa objekata. Medijator promovira labavo spajanje sprečavajući da se predmeti eksplicitno pozivaju jedni na druge i omogućuje vam neovisno mijenjanje njihove interakcije.

Imajte na umu da se obrazac dizajna medijatora razlikuje od uzorka dizajna fasade. Uzorak posrednika olakšava interakciju skupa objekata, dok fasadni uzorak jednostavno pruža objedinjeno sučelje skupu sučelja u aplikaciji. Stoga je obrazac medijatora obrazac ponašanja koji se bavi ponašanjem predmeta, fasadni obrazac je strukturni obrazac koji se bavi sastavom predmeta.

Implementacija uzorka dizajna medijatora u C #

Ali dosta koncepata - uđimo u neki kod. Sudionici u ovom dizajnu su posrednici, konkretni posrednici i jedan ili više tipova sudionika. Iako je posrednik odgovoran za definiranje sučelja za komunikaciju sa sudionicima, konkretni posrednik, kao što mu i samo ime govori, provodi sučelje medijatora i ima znanje o sudionicima. Imajte na umu da se tip sudionika ponekad naziva kolegom. Dakle, u nekim implementacijama imate vrste kolega i konkretnih kolega.

Sada se obratite na sljedeće sučelje. Ovo je sučelje za posrednika koji ćemo koristiti u ovom primjeru.

javno sučelje Imediator

    {

        nevažeći AddParticipant (sudionik IParticipant);

        void BroadcastMessage (string poruka, pošiljatelj IParticipant);

    }

Imajte na umu da ovo sučelje sadrži izjavu dviju metoda AddParticipant i  BroadcastMessage. Dok se prvi koristi za dodavanje sudionika na popis sudionika koji održava  ConcreteMediator razred (naveden u nastavku), drugi se koristi za emitiranje poruka na popis sudionika.

Evo  ConcreteMediator razreda. Provodi  IMediator sučelje. Ostavljam vam provedbu  BroadcastMessage metode da ispunite.

javna klasa ConcreteMediator: Imediator

    {

        Sudionici popisa = novi Popis ();

        javna praznina AddParticipant (sudionik IParticipant)

        {

            sudionici.Dodaj (sudionik);

        }

        javna void BroadcastMessage (string poruka, pošiljatelj IParticipant)

        {

            // Ovdje napišite kod za emitiranje poruke sudionicima

        }

    }

IParticipantSučelje sadrži deklaraciju  SendMessage metode.

javno sučelje Iparticipant

    {

        void SendMessage (niz poruka);

    }

Evo primjera konkretnih predavanja sudionika. Imajte na umu da ove klase implementiraju  IParticipant sučelje.

javna klasa ConcreteParticipant1: Iparticipant

    {

        zaštićeni posrednik IMediator;

        javni ConcreteParticipant1 (posrednik IMediator)

        {

            this.mediator = posrednik;

        }

        javna void SendMessage (niz poruka)

        {

            posrednik.SendMessage (poruka, ovo);

        }

    }

    javna klasa ConcreteParticipant2: Iparticipant

    {

        zaštićeni posrednik IMediator;

        javni ConcreteParticipant2 (posrednik IMediator)

        {

            this.mediator = posrednik;

        }

        javna void SendMessage (niz poruka)

        {

            posrednik.SendMessage (poruka, ovo);

        }

    }

I to je to! Sljedeći isječak koda pokazuje kako možete koristiti sve vrste koje smo do sada izgradili.

statička praznina Main (string [] args)

    {

        IMediator posrednik = novi ConcreteMediator ();

        Sudionik IP-a1 = novi ConcreteParticipant1 (posrednik);

        Sudionik IP-a2 = novi ConcreteParticipant2 (posrednik);

        posrednik.AddParticipant (sudionik1);

        posrednik.AddParticipant (sudionik2);

        sudionik1.SendMessage ("Ovo je prvi sudionik");

        sudionik2.SendMessage ("Ovo je drugi sudionik");

        Console.ReadLine ();

    }

Uzorak dizajna medijatora je obrazac ponašanja koji promiče labavo spajanje posredstvom komunikacije između različitih objekata. Budući da posrednik olakšava sve interakcije između predmeta, ti se objekti mogu mijenjati po volji. Što je najvažnije, ne trebaju imati nikakvo znanje jedni o drugima. Tako vam obrazac medijatora pomaže u pisanju dobro strukturiranog, održivog i lako provjerljivog koda.