Паттерн "Посредник" в Java — чат-комната и DispatcherServlet
Модель и масштаб — Основы БД, опорные темы, проектирование БД, пакетная работа. Карта — о разделе.
Краткий обзор — в поведенческих паттернах. Здесь — Mediator на Java: коллеги не вызывают друг друга напрямую, а координируются через центральный объект.
Play ITЗагрузка интерактивного демо…
Задача паттерна
Mediator убирает сеть прямых связей "каждый с каждым". Участники знают только посредника; он решает, кому передать сообщение и как отреагировать.
Аналогия — диспетчер в аэропорту: самолёты не согласуют взлёт между собой, а общаются с башней.
Пример — групповой чат
Код ITЗагрузка примера кода…
ChatRoom room = new GroupChatRoom();
User alice = new User("Alice");
User bob = new User("Bob");
User carol = new User("Carol");
room.addUser(alice);
room.addUser(bob);
room.addUser(carol);
alice.send("Привет всем!");
Mediator в Java-экосистеме
| Пример | Роль медиатора |
|---|---|
Spring MVC DispatcherServlet | Маршрутизация HTTP к контроллеру без связей контроллер↔контроллер; полный путь запроса (фильтры, HandlerMapping, перехватчики, ответ) — жизненный цикл в Spring Boot |
| Message broker (Kafka, JMS) | Продюсеры и консьюмеры не знают друг друга |
| JavaFX / Swing | Координаторы UI-событий между виджетами |
См. обзор Spring.
Mediator и Observer
| Mediator | Observer | |
|---|---|---|
| Топология | Звезда через центр | Издатель → много подписчиков |
| Кто маршрутизирует | Посредник решает логику доставки | Издатель рассылает всем подписчикам |
| Типичный кейс | Сложные перекрёстные правила UI/чата | Событие "статус заказа изменился" |
Подробнее про Observer на C# — Паттерн "Наблюдатель" в C# — события, IObservable и утечки; на Java — Паттерн "Наблюдатель" в Java — подписчики и ApplicationEvent.
Когда применять и риски
Уместен, если объектов много и прямые ссылки дают "паутину" зависимостей; нужно переиспользовать коллег в другом контексте.
Риск — медиатор превращается в God Object с тысячей строк. Лечение: разбить на под-медиаторы по доменам, вынести политики в отдельные классы.