Посредник (англ. Mediator) — поведенческий шаблон проектирования

Слайд 2

Проблема Обеспечить взаимодействие множества объектов, сформировав при этом слабую связанность и

Проблема
Обеспечить взаимодействие множества объектов, сформировав при этом слабую связанность и избавив

объекты от необходимости явно ссылаться друг на друга.
Слайд 3

Решение Создать объект, инкапсулирующий способ взаимодействия множества объектов.

Решение
Создать объект, инкапсулирующий способ взаимодействия множества объектов.

Слайд 4

Преимущества Устраняется связанность между "Коллегами", централизуется управление.

Преимущества
Устраняется связанность между "Коллегами", централизуется управление.

Слайд 5

Слайд 6

#include #include using namespace std; class master; class senior_slave; class slave; class slave_1_type; class slave_2_type;

#include #include using namespace std; class master; class senior_slave; class slave; class slave_1_type; class slave_2_type;

Слайд 7

class slave { protected: bool lazy; senior_slave* almoust_master; public: bool get_laziest()

class slave { protected: bool lazy; senior_slave* almoust_master; public: bool get_laziest() {

return lazy; } void set_almoust_master(senior_slave* x) { almoust_master=x; } }; class slave_1_type: public slave { public: slave_1_type() { lazy=true; } }; class slave_2_type: public slave { public: slave_2_type() { lazy=false; } };
Слайд 8

class senior_slave { master*x; vector slaves; public: void add_slave(slave* x) {

class senior_slave { master*x; vector slaves; public: void add_slave(slave* x) { slaves.push_back(x);

} int count_of_not_lazy() { int n=0; for(int i=0;iget_laziest()==0)n++; } return n; } void set_master(master*y) { x=y; } };
Слайд 9

class master { senior_slave*x; int count_of_not_lazy_slaves; public: void let_me_see_count_of_not_lazy_slaves() { count_of_not_lazy_slaves=x->count_of_not_lazy(); } void boast() { cout

class master { senior_slave*x; int count_of_not_lazy_slaves; public: void let_me_see_count_of_not_lazy_slaves() { count_of_not_lazy_slaves=x->count_of_not_lazy(); }

void boast() { cout<