Sobes.tech
Middle

Proqramlaşdırma kontekstində mediator nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Mediator — bu davranışsal dizayn nümunəsidir və digər obyektlər (kolegalar) arasında qarşılıqlı əlaqəni idarə etmək üçün mərkəzləşdirilmiş obyekt təklif edir. Obyektlər bir-biri ilə birbaşa əlaqə qurmaq əvəzinə, mediator vasitəsilə əlaqə qururlar.

Mediator istifadəsinin üstünlükləri:

  • Əlaqənin azaldılması: Obyektlər bir-birinə birbaşa istinad etmirlər, bu da onların asılılığını azaldır.
  • İdarəetmənin sadələşdirilməsi: Obyektlər arasındakı qarşılıqlı əlaqələr bir yerdə cəmlənir, bu da onların başa düşülməsini və dəyişdirilməsini asanlaşdırır.
  • Yenidən istifadə imkanlarının artırılması: Ayrı-ayrı komponentlər digər kontekstlərdə də istifadə oluna bilər, çünki onlar sistemin digər komponentləri ilə çox bağlı deyillər.

Əksikliklər:

  • Mediator-un mürəkkəbliyinin artması: Əlaqələrin sayı artdıqca, mediator özü də mürəkkəb və baxımı çətin ola bilər.
  • Performansın aşağı düşməsi ehtimalı: Bütün qarşılıqlı əlaqələr mərkəzi obyekt vasitəsilə keçir, bu da əlavə xərclər yarada bilər.

Ən sadə implementasiya nümunəsi:

// Mediator üçün interfeys
public interface IMediator
{
    void SendMessage(string message, Colleague colleague);
}

// Kolegalar üçün əsas sinif
public abstract class Colleague
{
    protected IMediator mediator;

    public Colleague(IMediator mediator)
    {
        this.mediator = mediator;
    }

    public abstract void ReceiveMessage(string message);
    public abstract void Send(string message);
}

// Konkret mediator
public class ConcreteMediator : IMediator
{
    private ConcreteColleague1 colleague1;
    private ConcreteColleague2 colleague2;

    public ConcreteColleague1 Colleague1
    {
        set { colleague1 = value; }
    }

    public ConcreteColleague2 Colleague2
    {
        set { colleague2 = value; }
    }

    public void SendMessage(string message, Colleague colleague)
    {
        if (colleague == colleague1)
        {
            colleague2.ReceiveMessage(message);
        }
        else
        {
            colleague1.ReceiveMessage(message);
        }
    }
}

// Konkret kolleqalar
public class ConcreteColleague1 : Colleague
{
    public ConcreteColleague1(IMediator mediator) : base(mediator) { }

    public override void ReceiveMessage(string message)
    {
        Console.WriteLine($"Kolleqa 1-dən mesaj alındı: {message}");
    }

    public override void Send(string message)
    {
        Console.WriteLine($"Kolleqa 1-dən mesaj göndərildi: {message}");
        mediator.SendMessage(message, this);
    }
}

public class ConcreteColleague2 : Colleague
{
    public ConcreteColleague2(IMediator mediator) : base(mediator) { }

    public override void ReceiveMessage(string message)
    {
        Console.WriteLine($"Kolleqa 2-dən mesaj alındı: {message}");
    }

    public override void Send(string message)
    {
        Console.WriteLine($"Kolleqa 2-dən mesaj göndərildi: {message}");
        mediator.SendMessage(message, this);
    }
}

// İstifadə nümunəsi
// var mediator = new ConcreteMediator();
// var colleague1 = new ConcreteColleague1(mediator);
// var colleague2 = new ConcreteColleague2(mediator);
// mediator.Colleague1 = colleague1;
// mediator.Colleague2 = colleague2;
// colleague1.Send("Salam Kolleqa 2!");
// colleague2.Send("Salam Kolleqa 1!");

Əksər hallarda, daha mürəkkəb sistemlərin mesaj mübadiləsini həyata keçirmək üçün Observer kimi digər nümunələrlə birlikdə istifadə olunur. .NET kontekstində isə, məsələn, MediatR kimi sorğu və komandalarla işləyən kitabxanalarda tətbiq edilir.