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

Что это такое

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


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

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

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

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

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

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

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

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


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

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

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