您的位置:首页 > 编程语言 > C语言/C++

C++设计模式之十七:Mediator(中介者模式)

2012-06-07 15:24 477 查看
一、意图:

用一个中介对象来封装一系列的对象交互。终结者使各对象不需要显示地相互调用,从而使其松散耦合,而且可以独立的改变他们之间的交互。

二、类图:



三、组成元素:

  i.           Mediator:中介者,定义一个接口与各同事对象通信。

          ii.           ConcreteMediator:具体中介者。

          iii.           Colleague:同事接口

          iv.           ConcreteColleage:具体同事类

四、实现代码:

#include <iostream>
#include <string>

using namespace std;

class Colleague;

// 中介者类
class Mediator
{
public:
virtual void Send(string message, Colleague* col) = 0;
};

// 同事类
class Colleague
{
public:
Colleague(Mediator* temp)
{
mediator = temp;
}
protected:
Mediator* mediator;
};

// 同事一
class ColleagueOne : public Colleague
{
public:
ColleagueOne(Mediator* media) : Colleague(media)
{

}
void Send(string strMessage)
{
mediator->Send(strMessage, this);
}
void Notify(string strMessage)
{
cout << "同事一获得了消息:" << strMessage << endl;
}
};

// 同事二
class ColleagueTwo : public Colleague
{
public:
ColleagueTwo(Mediator* media) : Colleague(media)
{

}
void Send(string strMessage)
{
mediator->Send(strMessage, this);
}
void Notify(string strMessage)
{
cout << "同事二获得了消息:" << strMessage << endl;
}
};

// 具体中介者类
class ConcreteMediator : public Mediator
{
public:
ColleagueOne* colOne;
ColleagueTwo* colTwo;
virtual void Send(string message, Colleague* col);
};
void ConcreteMediator::Send(string message, Colleague* col)
{
if (col == colOne)
{
colTwo->Notify(message);
}
else
{
colOne->Notify(message);
}
}

int main()
{
ConcreteMediator* m = new ConcreteMediator();
// 让同事认识中介
ColleagueOne* colOne = new ColleagueOne(m);
ColleagueTwo* colTwo = new ColleagueTwo(m);
// 让中介认识具体的同事类
m->colOne = colOne;
m->colTwo = colTwo;

colOne->Send("吃饭了吗?");
colTwo->Send("还没吃,你请啊?");

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: