Similar presentations:
Посредник (англ. Mediator) — поведенческий шаблон проектирования
1.
Посредник (англ. Mediator) — поведенческийшаблон проектирования, обеспечивающий
взаимодействие множества объектов, формируя
при этом слабую связанность и избавляя объекты
от необходимости явно ссылаться друг на друга.
2.
ПроблемаОбеспечить взаимодействие множества объектов,
сформировав при этом слабую связанность и
избавив объекты от необходимости явно
ссылаться друг на друга.
3.
РешениеСоздать объект, инкапсулирующий способ
взаимодействия множества объектов.
4.
ПреимуществаУстраняется связанность между
"Коллегами", централизуется управление.
5.
6.
#include <iostream>#include <vector>
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()
{
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<slave*> slaves;
public:
void add_slave(slave* x)
{
slaves.push_back(x);
}
int count_of_not_lazy()
{
int n=0;
for(int i=0;i<slaves.size();i++)
{
if(slaves[i]->get_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<<count_of_not_lazy_slaves<<endl;
}
void set_senior_slave(senior_slave*y)
{
x=y;
}
};
10.
int 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;
}