Sobes.tech
Middle

Программалоо контекстинде медиатор деген эмне?

sobes.tech AI

AIден жооп

Медиатор — бул жүрүм-турум үлгүсү, ал башка объекттердин (коллегалардын) өз ара аракеттешүүсүн башкаруу үчүн борбордук объектти сунуштайт. Объекттер түздөн-түз байланышуу ордуна, алар аркылуу аракеттешет.

Медиаторду колдонууңун артыкчылыктары:

  • Байланыштын азайышы: Объекттер бири-бирине түз шилтемелерге ээ эмес, бул алардын көзкарандылыгын азайтат.
  • Башкарууну жеңилдетүү: Объекттердин өз ара аракеттешүүлөрү бир жерге топтолгон, бул алардын түшүнүктүүлүгүн жана өзгөртүүлүгүн жеңилдетет.
  • Кайталап колдонуу мүмкүнчүлүгүн жакшыртуу: Ар separable компоненттер башка контексттерде да колдонулушу мүмкүн, анткени алар системанын башка компоненттери менен өтө байланышта эмес.

Кемчиликтери:

  • Медиатордун кыйынчылыгынын өсүшү: Өз ара аракеттешүүлөрдүн саны өсүп жатканда, медиатор өзү да татаал жана оңдоосу кыйын болушу мүмкүн.
  • Өнүмдүүлүктүн төмөндөшү мүмкүн: Бардык өз ара аракеттешүүлөр борбордук объект аркылуу өтөт, бул кошумча чыгымдарга алып келиши мүмкүн.

Жөнөкөй ишке ашыруу мисалы:

// Медиатор үчүн интерфейс
public interface IMediator
{
    void SendMessage(string message, Colleague colleague);
}

// Коллегалар үчүн негизги класс
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);
}

// Конкреттүү медиатор
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);
        }
    }
}

// Конкреттүү коллегалар
public class ConcreteColleague1 : Colleague
{
    public ConcreteColleague1(IMediator mediator) : base(mediator) { }

    public override void ReceiveMessage(string message)
    {
        Console.WriteLine($"Коллега 1ден билдирүү алынды: {message}");
    }

    public override void Send(string message)
    {
        Console.WriteLine($"Коллега 1ден билдирүү жөнөтүлдү: {message}");
        mediator.SendMessage(message, this);
    }
}

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

    public override void ReceiveMessage(string message)
    {
        Console.WriteLine($"Коллега 2ден билдирүү алынды: {message}");
    }

    public override void Send(string message)
    {
        Console.WriteLine($"Коллега 2ден билдирүү жөнөтүлдү: {message}");
        mediator.SendMessage(message, this);
    }
}

// Колдонуу мисалы
// var mediator = new ConcreteMediator();
// var colleague1 = new ConcreteColleague1(mediator);
// var colleague2 = new ConcreteColleague2(mediator);
// mediator.Colleague1 = colleague1;
// mediator.Colleague2 = colleague2;
// colleague1.Send("Салам, Коллега 2!");
// colleague2.Send("Салам, Коллега 1!");