#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
typedef string State;
class Colleague;
class Mediator
{
public:
virtual void AToB() = 0;
virtual void BToA() = 0;
virtual void IntroColleague(Colleague* pColleagueA, Colleague* pColleagueB) = 0;
virtual ~Mediator() {}
};
class Colleague
{
protected:
Mediator* m_pMediator;
public:
Colleague() {}
Colleague(Mediator* pMediator):m_pMediator(pMediator){}
virtual void Action() = 0;
virtual void SetDate(const State& sta) = 0;
virtual State GetDate() const = 0;
virtual void PrintDate() = 0;
};
class ConcreteColleagueA:public Colleague
{
public:
ConcreteColleagueA() {}
ConcreteColleagueA(Mediator* pMediator):Colleague(pMediator) {}
void SetDate(const State& sta) {m_date = sta;}
State GetDate() const {return m_date;}
void Action()
{
m_pMediator->AToB();
}
void PrintDate() {cout<<m_date<<endl;}
private:
State m_date;
};
class ConcreteColleagueB:public Colleague
{
public:
ConcreteColleagueB() {}
ConcreteColleagueB(Mediator* pMediator):Colleague(pMediator) {}
void SetDate(const State& sta) {m_date = sta;}
State GetDate() const {return m_date;}
void Action()
{
m_pMediator->BToA();
}
void PrintDate() {cout<<m_date<<endl;}
private:
State m_date;
};
class ConcreteMediator:public Mediator
{
public:
void AToB() {m_pColleagueB->SetDate(m_pColleagueA->GetDate());}
void BToA() {m_pColleagueA->SetDate(m_pColleagueB->GetDate());}
void IntroColleague(Colleague* pColleagueA, Colleague* pColleagueB)
{
m_pColleagueA = pColleagueA;
m_pColleagueB = pColleagueB;
}
private:
Colleague* m_pColleagueA;
Colleague* m_pColleagueB;
};
int _tmain(int argc, _TCHAR* argv[])
{
Mediator* pMediator = new ConcreteMediator;
Colleague* pColleagueA = new ConcreteColleagueA(pMediator);
Colleague* pColleagueB = new ConcreteColleagueB(pMediator);
pMediator->IntroColleague(pColleagueA, pColleagueB);
pColleagueA->SetDate("this is A");
pColleagueB->SetDate("this is B");
pColleagueA->PrintDate();
pColleagueB->PrintDate();
pColleagueA->Action();
//after A's change, B is also changed;
pColleagueB->PrintDate();
getchar();
return 0;
}
c++中介者模式
最新推荐文章于 2025-06-30 11:08:01 发布