Перейти к основному содержимому

Что это такое

Паттерн Mediator (посредник) переносит общение между множеством объектов в одно центральное место. Вместо того чтобы каждый знал каждого (а n объектов означают n·n связей), каждый объект знает только посредника, а посредник направляет сообщения.


Пример: чат-комната

Пользователи никогда не хранят ссылки друг на друга. Пользователь отправляет сообщение в комнату, а комната доставляет его всем остальным. Вход и выход затрагивают один массив в одном месте.

Все общаются через комнату

Ana знает только комнату, а комната знает всех. Один вызов send выводит две строки — ben и cleo получают сообщение, а ana не получает своё собственное сообщение обратно. Правила доставки — пропустить отправителя, а позже, возможно, отключить звук или добавить личные сообщения — находятся ровно в одном методе.

Prompt
Напишите программу на TypeScript с паттерном Mediator: класс ChatRoom, к которому присоединяются пользователи и который рассылает сообщение отправителя всем остальным пользователям, и класс User, который знает только комнату. Пусть три пользователя присоединятся к комнате, а один из них отправит сообщение, и выведите то, что получает каждый другой пользователь.
Вывод: программа на TypeScript и захваченный вывод

Когда его применять

Применяйте его, когда много объектов координируют свои действия и сеть «кто кому сообщает» становится слишком плотной — чат-системы, поля формы, которые включают и отключают друг друга, координация в стиле управления воздушным движением.

Откажитесь от него, если объектов два или три и связи простые. Посредник между двумя сторонами — это лишнее звено, которое никто не нанимал.


Плюсы и минусы

Плюсы: участники остаются простыми и переиспользуемыми; правила координации читаются в одном месте; добавление участника не затрагивает ничего другого.

Минусы: посредник разрастается — он может незаметно превратиться в огромный класс, который знает всё; весь трафик через одну точку может скрывать потери в производительности.