#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Colleague;
class Mediator
{
public:
virtual void sendMessage(const string& strMessage, Colleague* pobjColleague) = 0;
};
class Colleague
{
public:
Colleague() {}
Colleague(Mediator* pobjMediator) : m_pobjMediator(pobjMediator) {}
virtual void notify(const string& strMessage) = 0;
virtual void sendMessage(const string& strMessage)
{
m_pobjMediator->sendMessage(strMessage, this);
}
protected:
Mediator* m_pobjMediator;
};
class ConcreteColleagueOne : public Colleague
{
public:
ConcreteColleagueOne() {}
ConcreteColleagueOne(Mediator* pobjMediator) : Colleague(pobjMediator) {}
virtual void notify(const string& strMessage) override
{
cout << "彳亍收到消息 " << strMessage << endl;
}
};
class ConcreteColleagueTwo : public Colleague
{
public:
ConcreteColleagueTwo() {}
ConcreteColleagueTwo(Mediator* pobjMediator) : Colleague(pobjMediator) {}
virtual void notify(const string& strMessage) override
{
cout << "行收到消息 " << strMessage << endl;
}
};
class ConcreteMediator : public Mediator
{
public:
void addColleague(Colleague* pobjColleague)
{
if (pobjColleague)
{
m_vecColleague.push_back(pobjColleague);
}
}
void removeColleague(Colleague* pobjColleague)
{
for (auto it = m_vecColleague.begin(); it != m_vecColleague.end(); ++it)
{
if (*it == pobjColleague)
{
m_vecColleague.erase(it);
}
}
}
virtual void sendMessage(const string& strMessage, Colleague* pobjColleague) override
{
for (auto& it : m_vecColleague)
{
if (it && it != pobjColleague)
{
it->notify(strMessage);
}
}
}
private:
vector<Colleague*> m_vecColleague;
};
int main()
{
ConcreteMediator* pobjMediator = new ConcreteMediator();
Colleague* pobjColleagueOne = new ConcreteColleagueOne(pobjMediator);
Colleague* pobjColleagueTwo = new ConcreteColleagueTwo(pobjMediator);
pobjMediator->addColleague(pobjColleagueOne);
pobjMediator->addColleague(pobjColleagueTwo);
pobjColleagueOne->sendMessage("你好");
return 0;
}
总结:中介者把所有的控制都集中在自己的身上,加大了复杂度,减少了复杂的通信
中介者模式
最新推荐文章于 2019-08-20 13:01:44 发布