Посередник (шаблон проєктування)

Посередник (англ. Mediator) — шаблон проєктування, наледжить до класу шаблонів поведінки.

Призначення ред.

Визначає об'єкт, що інкапсулює спосіб взаємодії множини об'єктів. Посередник забезпечує слабку зв'язаність системи, звільняючи об'єкти від необхідності явно посилатися один на одного, і дозволяючи тим самим незалежно змінювати взаємодії між ними.

Застосовність ред.

Слід використовувати шаблон Посередник у випадках, коли:

  • існують об'єкти, зв'язки між котрими досить складні та чітко задані. Отримані при цьому залежності не структуровані та важкі для розуміння;
  • не можна повторно використовувати об'єкт, оскільки він обмінюється інформацією з багатьма іншими об'єктами;
  • поведінка, розподілена між кількома класами, повинна піддаватися налагодженню без створювання множини підкласів.

Структура ред.

 
UML діаграма, що описує структуру шаблону проєктування Посередник
  • Mediator — посередник:
    • визначає інтерфейс для обміну інформацією з об'єктами Colleague;
  • ConcreteMediator — конкретний посередник:
    • реалізує кооперативну поведінку, координуючи дії об'єктів Colleague;
    • володіє інформацією про колег, та підраховує їх;
  • Класи Colleague — колеги:
    • кожному класу Colleague відомо про свій об'єкт Mediator;
    • усі колеги обмінюються інформацією виключно через посередника, інакше за його відсутності їм довелося б спілкуватися між собою напряму.

Відносини ред.

Колеги посилають запити посередникові та отримують запити від нього. Посередник реалізує кооперативну поведінку шляхом переадресації кожного запиту відповідному колезі (або декільком з них).

Переваги та недоліки ред.

Переваги ред.

  • Медіатор вказує логіку посередництва між колегами. З цієї причини це легше зрозуміти цю логіку, оскільки вона зберігається лише в одному класі.
  • Класи колег повністю відокремлені. Додавання нового класу колеги дуже легко через цей рівень роз'єднання.
  • Об'єкти колеги повинні спілкуватися лише з об'єктами посередника. Практично модель медіатора зменшує необхідні канали зв'язку (протоколи) від багатьох до багатьох до одного до багатьох і багатьох до одного.
  • Оскільки вся логіка зв'язку вказується класом посередника, коли ця логіка потребує розширення, лише клас посередника потрібно розширити.

Недоліки ред.

  • Складність — на практиці посередники стають все більш складними та складними

Зв'язок із іншими патернами ред.

  • Посередник створює двосторонній зв'язок, часто незмінний. Забирає залежності між компонентами системи. Компоненти стають залежними від посередника. Спостерігач створює односторонній зв'язок, який може мінятись під час виконання програми. Таким чином одні об'єкти залежать від інших.

Приклади ред.

C++ ред.

C# ред.

Java ред.

Python ред.

TypeScript ред.

Джерела ред.

Література ред.

Алан Шаллоуей, Джеймс Р. Тротт. Шаблоны проектирования. Новый подход к объектно-ориентированному анализу и проектированию = Design Patterns Explained: A New Perspective on Object-Oriented Design. — М. : «Вильямс», 2002. — 288 с. — ISBN 0-201-71594-5.