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

c++中介者模式

2015-10-21 21:24 302 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: