printПаттерны поведения

printПосредник

Mediator

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

Результаты
1. Посредник локализует поведение, которое в противном случае пришлось бы распределять между несколькими объектами. Для изменения поведения нужно породить подклассы только от класса посредника Mediator, классы коллег Colleague можно использовать повторно без каких бы то ни было изменений.
2. Посредник обеспечивает слабую связанность коллег. Можно изменять классы Colleague и Mediator независимо друг от друга.
3. Посредник заменяет способ взаимодействия «все со всеми» способом «один со всеми», то есть один посредник взаимодействует со всеми коллегами. Отношения вида «один ко многим» проще для понимания, сопровождения и расширения.
4. Выделение механизма посредничества в отдельную концепцию и инкапсуляция ее в одном объекте позволяет сосредоточиться именно на взаимодействии объектов, а не на их индивидуальном поведении. Это дает возможность прояснить имеющиеся в системе взаимодействия.
5. Паттерн посредник переносит сложность взаимодействия в класс-посредник. Поскольку посредник инкапсулирует протоколы, то он может быть сложнее отдельных коллег. В результате сам посредник становится монолитом, который трудно сопровождать.

Структура
11727.png

Реализация
// Посредник реализует кооперативное поведение, координируя действия коллег
class Mediator {
public:
  void Operation1();
  void Operation2();
};
// Коллеги знают о своем посреднике и обмениваются информацией только через него
class Collegue {
protected:
  Mediator *m;
public:
  Collegue(Mediator *m):m(m) {}
};
class Collegue1 : public Collegue {
public:
  void Action1() { m->Operation1(); }
};
class Collegue2 : public Collegue {
public:
  void Action2() { m->Operation2(); }
};
loading