Как да използвам шаблона за дизайн на медиатор в C #

Дизайнерските модели се използват за решаване на често срещани дизайнерски проблеми и намаляване на сложността в нашия код. Моделът на медиатор е модел на поведенчески дизайн, който насърчава свободното свързване между обектите и помага да се организира кода за комуникация между обектите.

Тази статия представя дискусия на модела на дизайн на медиатора и как той може да бъде приложен с помощта на C #.

Какъв е моделът на дизайн на медиатора? 

Представете си приложение, в което има много обекти, които комуникират помежду си. Моделът на дизайн на медиатора е полезен, когато броят на обектите нараства толкова голям, че става трудно да се поддържат препратките към обектите. Посредникът по същество е обект, който капсулира как един или повече обекти взаимодействат помежду си. Моделът за дизайн на медиатора контролира начина, по който тези обекти комуникират, и помага да се намали броят на зависимостите между тях, които трябва да управлявате.

В модела на дизайн на медиатора обектите не комуникират помежду си директно, а чрез медиатора. Когато даден обект трябва да комуникира с друг обект или набор от обекти, той предава съобщението на медиатора. След това посредникът предава съобщението на всеки обект на приемник във форма, която е разбираема за него.

Чрез елиминиране на директната комуникация между обектите, моделът на медиаторния дизайн насърчава свободното свързване. Другата полза от използването на шаблона за дизайн на медиатора е, че подобрява четливостта и поддръжката на кода. За добра мярка ето официалната дефиниция на Gang of Four за модела на медиатора:

Дефинирайте обект, който капсулира как взаимодействат набор от обекти. Посредникът насърчава свободното свързване, като не позволява на предметите да се отнасят изрично един към друг и ви позволява да променяте тяхното взаимодействие независимо.

Имайте предвид, че моделът на дизайн на медиатора се различава от модела на фасаден дизайн. Моделът на медиатора улеснява взаимодействието на набор от обекти, докато фасадният модел просто осигурява унифициран интерфейс към набор от интерфейси в приложението. По този начин медиаторният модел е модел на поведение, който се занимава с поведението на обекта, фасадният модел е структурен модел, който се занимава с обектния състав.

Внедряване на шаблона за дизайн на медиатор в C #

Но достатъчно от концепциите - нека да влезем в някакъв код. Участниците в този дизайн са медиаторът, конкретният медиатор и един или повече участници. Докато медиаторът е отговорен за дефинирането на интерфейса за комуникация с участниците, конкретният медиатор, както подсказва името, прилага интерфейса на медиатора и има познания за участниците. Имайте предвид, че типът участник понякога се нарича колега. Така че в някои изпълнения имате типове колеги и конкретни колеги.

Сега се обърнете към следния интерфейс. Това е интерфейсът за медиатора, който ще използваме в този пример.

публичен интерфейс Имедиатор

    {

        void AddParticipant (участник в IParticipant);

        void BroadcastMessage (низово съобщение, изпращач на IParticipant);

    }

Имайте предвид, че този интерфейс съдържа декларацията за два метода AddParticipant и  BroadcastMessage. Докато първият се използва за добавяне на участници в списък на участниците, поддържан от  ConcreteMediator класа (даден по-долу), вторият се използва за излъчване на съобщения в списъка на участниците.

Тук е  ConcreteMediator класът. Той реализира  IMediator интерфейса. Оставям изпълнението на  BroadcastMessage метода за вас да попълните.

публичен клас ConcreteMediator: Imediator

    {

        Участници в списъка = нов Списък ();

        публична невалидност AddParticipant (участник от IParticipant)

        {

            участници.Добави (участник);

        }

        публична невалидна BroadcastMessage (низово съобщение, изпращач на IParticipant)

        {

            // Напишете код тук, за да излъчите съобщението до участниците

        }

    }

В IParticipantинтерфейса съдържа декларацията на  SendMessage метода.

публичен интерфейс Iparticipant

    {

        void SendMessage (низ съобщение);

    }

Ето пример за конкретни класове за участници. Имайте предвид, че тези класове реализират  IParticipant интерфейса.

публичен клас ConcreteParticipant1: Iparticipant

    {

        защитен IMediator медиатор;

        публичен ConcreteParticipant1 (IMediator медиатор)

        {

            this.mediator = посредник;

        }

        публична невалидна SendMessage (низ съобщение)

        {

            mediator.SendMessage (съобщение, това);

        }

    }

    публичен клас ConcreteParticipant2: Iparticipant

    {

        защитен IMediator медиатор;

        публичен ConcreteParticipant2 (посредник IMediator)

        {

            this.mediator = посредник;

        }

        публична невалидна SendMessage (низ съобщение)

        {

            mediator.SendMessage (съобщение, това);

        }

    }

И това е! Следният кодов фрагмент показва как можете да използвате всички видове, които сме изградили досега.

static void Main (низ [] аргументи)

    {

        IMediator посредник = нов ConcreteMediator ();

        IP участник участник1 = нов конкретен участник1 (медиатор);

        IParticipant участник2 = нов ConcreteParticipant2 (медиатор);

        посредник.AddParticipant (участник1);

        посредник.AddParticipant (участник2);

        участник1.SendMessage („Това е първият участник“);

        участник2.SendMessage („Това е вторият участник“);

        Console.ReadLine ();

    }

Моделът на дизайн на медиатора е модел на поведение, който насърчава свободното свързване чрез посредничество при комуникациите между различни обекти. Тъй като посредникът улеснява всички взаимодействия между обекти, тези обекти могат да бъдат променяни по желание. Най-важното е, че не е нужно да имат познания един за друг. По този начин шаблонът на медиатора ви помага да напишете добре структуриран, поддържаем и лесно проверяем код.