Слайд 1Посредник (англ. Mediator) — поведенческий шаблон проектирования, обеспечивающий взаимодействие множества объектов,
формируя при этом слабую связанность и избавляя объекты от необходимости явно ссылаться друг на друга.
Слайд 2Проблема
Обеспечить взаимодействие множества объектов, сформировав при этом слабую связанность и избавив
объекты от необходимости явно ссылаться друг на друга.
Слайд 3Решение
Создать объект, инкапсулирующий способ взаимодействия множества объектов.
Слайд 4Преимущества
Устраняется связанность между "Коллегами", централизуется управление.
Слайд 6#include
#include
using namespace std;
class master;
class senior_slave;
class slave;
class slave_1_type;
class slave_2_type;
Слайд 7class 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;
}
};
Слайд 8class 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;
}
};
Слайд 9class 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<
Слайд 10int main()
{
slave*z;
senior_slave*y;
master*x;
x=new master();
y=new senior_slave();
x->set_senior_slave(y);
y->set_master(x);
for(int i=0;i<10;i++)
{
z=new slave_1_type();
z->set_almoust_master(y);
y->add_slave(z);
}
for(int i=0;i<8;i++)
{
z=new slave_2_type();
z->set_almoust_master(y);
y->add_slave(z);
}
x->let_me_see_count_of_not_lazy_slaves();
x->boast();
return 0;
}