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

Что это такое

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


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

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

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

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

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

Когда его использовать

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

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


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

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

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