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

Что это

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


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

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

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

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

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

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

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

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


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

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

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