Sobes.tech
Back to questions
Junior — Middle
65

Можете объяснить концепцию паттерна медиатор и его роль в управлении взаимодействием объектов?

Companies where asked
Sector Tree

Answer from AI

sobes.tech 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("Mediator reacts on A and triggers following operations:");
            _component2.DoC();
        }
        else if (ev == "D")
        {
            Console.WriteLine("Mediator reacts on D and triggers following operations:");
            _component1.DoB();
            _component2.DoC();
        }
    }
}

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

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

    public void DoA()
    {
        Console.WriteLine("Component 1 does A.");
        _mediator.Notify(this, "A");
    }

    public void DoB()
    {
        Console.WriteLine("Component 1 does B.");
    }
}

public class Component2
{
    private IMediator _mediator;

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

    public void DoC()
    {
        Console.WriteLine("Component 2 does C.");
    }

    public void DoD()
    {
        Console.WriteLine("Component 2 does D.");
        _mediator.Notify(this, "D");
    }
}

Таким образом, медиатор управляет взаимодействием компонентов, делая систему более гибкой и поддерживаемой.