中介者模式--用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的相互引用,从而降低耦合;而且可以独立地改变它们之间的交互。
// mediator.cpp : 定义控制台应用程序的入口点。
//
#include<iostream>
using namespace std;
#include<string>
#include<list>
class Mediator;
class Colleague
{
public:
Colleague(Mediator *m,string name)
{
this->m = m;
this->name = name;
}
Mediator *m;
virtual void notify(string &s,Colleague*c)
{
cout << this->name << " receive a message from " << c->name << " : " << s << endl;
}
virtual void say(string s);
string name;
};
class ColleagueA :public Colleague
{
public:
ColleagueA(Mediator *m,string name):Colleague(m,name)
{
}
};
class ColleagueB :public Colleague
{
public:
ColleagueB(Mediator *m,string name):Colleague(m,name)
{
}
};
class Mediator
{
public:
Colleague *c1;
Colleague *c2;
void say(string s,Colleague*from)
{
if(c1 == from)
{
c2->notify(s,c1);
}
else if(c2 == from)
{
c1->notify(s,c2);
}
}
void introduceA(Colleague*c)
{
c1 = c;
}
void introduceB(Colleague*c)
{
c2 = c;
}
};
void Colleague::say(string s)
{
this->m->say(s,this);
}
int main(int argc, char* argv[])
{
Mediator m;
ColleagueA a(&m,"A");
ColleagueB b(&m,"B");
m.c1 = &a;
m.c2 = &b;
a.say("how are you?");
b.say("i'm fine,thank you.and you?");
a.say("i'm fine too.");
return 0;
}
代码里简单的用两个对象交互