Sobes.tech
Junior — Middle

Объектілердің өзара әрекеттесуін басқаруда медиатор үлгісінің концепциясы мен оның рөлін түсіндіре аласыз ба?

sobes.tech AI

AI-дан жауап

"Медиатор" паттерні (Mediator) бірнеше объектілер арасындағы өзара әрекетті жеңілдету үшін пайдаланылады, олардың арасындағы тікелей байланыстар санын азайтады. Объектілер бір-бірімен тікелей қатынаспай, орталықтандырылған объект — медиатор арқылы өзара әрекеттеседі.

Медиатордың рөлі:

  • Өзара әрекеттесу логикасын орталықтандырады.
  • Компоненттердің байланысын азайтады.
  • Объектілерді өзгертілмей, өзара әрекеттесуін өзгертуге мүмкіндік береді.

C# тілінде мысал:

// Медиатор интерфейсі
public interface IMediator
{
    void Notify(object sender, string ev);
}

// Нақты медиатор
public class ConcreteMediator : IMediator
{
    private Component1 _component1;
    private Component2 _component2;

    public ConcreteMediator(Component1 c1, Component2 c2)
    {
        _component1 = c1;
        _component1.SetMediator(this);
        _component2 = c2;
        _component2.SetMediator(this);
    }

    public void Notify(object sender, string ev)
    {
        if (ev == "A")
        {
            Console.WriteLine("Медиатор A оқиғасына реакция жасап, келесі операцияларды іске қосады:");
            _component2.DoC();
        }
        else if (ev == "D")
        {
            Console.WriteLine("Медиатор D оқиғасына реакция жасап, келесі операцияларды іске қосады:");
            _component1.DoB();
            _component2.DoC();
        }
    }
}

// Компоненттер
public class Component1
{
    private IMediator _mediator;

    public void SetMediator(IMediator mediator)
    {
        _mediator = mediator;
    }

    public void DoA()
    {
        Console.WriteLine("Компонент 1 A орындайды.");
        _mediator.Notify(this, "A");
    }

    public void DoB()
    {
        Console.WriteLine("Компонент 1 B орындайды.");
    }
}

public class Component2
{
    private IMediator _mediator;

    public void SetMediator(IMediator mediator)
    {
        _mediator = mediator;
    }

    public void DoC()
    {
        Console.WriteLine("Компонент 2 C орындайды.");
    }

    public void DoD()
    {
        Console.WriteLine("Компонент 2 D орындайды.");
        _mediator.Notify(this, "D");
    }
}

Осылайша, медиатор компоненттердің өзара әрекеттесуін басқарады, жүйені икемді әрі қолдауға оңай етеді.