Programování

Jak používat návrhový vzor mediátora v C #

Návrhové vzory se používají k řešení běžných návrhových problémů a ke snížení složitosti v našem kódu. Mediátorový vzor je vzor návrhu chování, který podporuje volné propojení mezi objekty a pomáhá organizovat kód pro komunikaci mezi objekty.

Tento článek představuje diskusi o návrhovém vzoru mediátora a o tom, jak jej lze implementovat pomocí C #.

Jaký je návrhový vzor mediátora?

Představte si aplikaci, ve které existuje mnoho objektů, které spolu komunikují. Návrhový vzor mediátora je užitečný, když počet objektů roste tak velký, že je obtížné udržovat odkazy na objekty. Mediátor je v podstatě objekt, který zapouzdřuje, jak jeden nebo více objektů interagují navzájem. Návrhový vzor mediátora řídí, jak tyto objekty komunikují, a pomáhá snížit počet závislostí mezi nimi, které musíte spravovat.

V návrhovém vzoru mediátora objekty spolu nekomunikují přímo, ale prostřednictvím mediátora. Když objekt potřebuje komunikovat s jiným objektem nebo sadou objektů, předá zprávu mediátorovi. Zprostředkovatel poté odešle zprávu každému objektu přijímače ve formě, která je pro něj srozumitelná.

Eliminací přímé komunikace mezi objekty podporuje návrhový vzor mediátora volné spojení. Další výhodou použití návrhového vzoru mediátoru je, že zlepšuje čitelnost kódu a udržovatelnost. Pro správnou míru je zde oficiální definice vzoru mediátora Gang of Four:

Definujte objekt, který zapouzdřuje způsob interakce sady objektů. Mediator podporuje volné spojení tím, že brání objektům v explicitním vzájemném odkazování, a umožňuje vám nezávisle měnit jejich interakci.

Všimněte si, že návrhový vzor mediátora se liší od vzorového návrhu fasády. Vzorec zprostředkovatele usnadňuje interakci sady objektů, zatímco vzor fasády jednoduše poskytuje jednotné rozhraní pro sadu rozhraní v aplikaci. Vzorec zprostředkovatele je tedy vzor chování, který se zabývá chováním objektu, vzor fasády je strukturální vzor, ​​který se zabývá kompozicí objektu.

Implementace návrhového vzoru mediátora v C #

Ale dost konceptů - pojďme se podívat na nějaký kód. Účastníky tohoto návrhu jsou mediátor, konkrétní mediátor a jeden nebo více typů účastníků. Zatímco mediátor je odpovědný za definování rozhraní pro komunikaci s účastníky, konkrétní mediátor, jak název napovídá, implementuje rozhraní mediátora a má znalosti účastníků. Typ účastníka se někdy nazývá kolega. Takže v některých implementacích máte typy kolegů a konkrétních kolegů.

Nyní se podívejte na následující rozhraní. Toto je rozhraní pro mediátora, které v tomto příkladu použijeme.

veřejné rozhraní Imediator

    {

void AddParticipant (IParticipant participant);

void BroadcastMessage (textová zpráva, odesílatel IP účastníka);

    }

Toto rozhraní obsahuje deklaraci dvou metod, Přidat účastníka aBroadcastMessage. Zatímco první se používá k přidání účastníků do seznamu účastníků udržovanéhoConcreteMediator třída (uvedená níže), druhá se používá k vysílání zpráv do seznamu účastníků.

Zde jeConcreteMediator třída. ImplementujeEditor rozhraní. Opouštím implementaciBroadcastMessage způsob vyplnění.

veřejná třída ConcreteMediator: Imediator

    {

Seznam účastníků = nový Seznam ();

public void AddParticipant (IParticipant participant)

        {

účastníci.Přidat (účastník);

        }

public void BroadcastMessage (textová zpráva, odesílatel IP účastníka)

        {

// Sem napište kód pro vysílání zprávy účastníkům

        }

    }

The Účastník rozhraní obsahuje prohlášení oPoslat zprávu metoda.

veřejné rozhraní účastník

    {

void SendMessage (textová zpráva);

    }

Zde je příklad konkrétních tříd účastníků. Všimněte si, že tyto třídy implementujíÚčastník rozhraní.

veřejná třída ConcreteParticipant1: Iparticipant

    {

chráněný mediátor IMediator;

public ConcreteParticipant1 (IMediator mediator)

        {

this.mediator = prostředník;

        }

public void SendMessage (textová zpráva)

        {

mediator.SendMessage (zpráva, toto);

        }

    }

veřejná třída ConcreteParticipant2: Iparticipant

    {

chráněný mediátor IMediator;

public ConcreteParticipant2 (IMediator mediator)

        {

this.mediator = prostředník;

        }

public void SendMessage (textová zpráva)

        {

mediator.SendMessage (zpráva, toto);

        }

    }

A to je vše! Následující fragment kódu ukazuje, jak můžete použít všechny typy, které jsme dosud vytvořili.

static void Main (řetězec [] args)

    {

Mediator IMediator = nový ConcreteMediator ();

IParticipant participant1 = new ConcreteParticipant1 (mediator);

IParticipant participant2 = new ConcreteParticipant2 (mediator);

mediator.AddParticipant (participant1);

mediator.AddParticipant (participant2);

účastník 1. Odeslat zprávu („Toto je první účastník“);

participant2.SendMessage („Toto je druhý účastník“);

Console.ReadLine ();

    }

Návrhový vzor mediátora je vzor chování, který podporuje volné propojení zprostředkováním komunikace mezi různorodými objekty. Protože zprostředkovatel usnadňuje všechny interakce mezi objekty, lze tyto objekty libovolně měnit. A co je nejdůležitější, nemusí mít navzájem žádné znalosti. Vzor zprostředkovatele vám tak pomůže psát dobře strukturovaný, udržovatelný a snadno testovatelný kód.