Mediator (C++实现)

好文章推荐: http://blog.csdn.net/roynee/archive/2009/10/05/4634197.aspx

下面是简单实现:(转载)
class Mediator;



class Colleage

{

public:

virtual ~Colleage(){};

virtual void Action()=0;

virtual void SetState(const string& sd)=0;

virtual string GetState()=0;

protected:

Colleage(){};

Colleage(Mediator mdt){this->m_mdt=mdt;};

Mediator
m_mdt;

};

class ConcreteColleageA:public Colleage

{

public:

ConcreteColleageA(){};

ConcreteColleageA(Mediator mdt):Colleage(mdt){}

~ConcreteColleageA(){};

void SetState(const string& sd){m_sd=sd;}

string GetState(){return m_sd;}

void Action();

private:

string m_sd;

};
class ConcreteColleageB:public Colleage

{

public:

ConcreteColleageB(){};

ConcreteColleageB(Mediator
mdt):Colleage(mdt){}

~ConcreteColleageB(){};

void SetState(const string& sd){m_sd=sd;};

string GetState(){return m_sd;}

void Action();

private:

string m_sd;

};class Mediator

{

public:

virtual ~Mediator(){};

virtual void DoActionFromAtoB()=0;

virtual void DoActionFromBtoA()=0;

protected:

Mediator(){};

};
class ConcreteMediator:public Mediator

{

public:

ConcreteMediator(){};

ConcreteMediator(Colleage ClA,Colleage ClB){m_ClA=ClA;m_ClB=ClB;};

~ConcreteMediator(){};

void SetConA(Colleage ClA){m_ClA=ClA;}

void SetConB(Colleage
ClB){m_ClB=ClB;}

Colleage GetConA(){return m_ClA;}

Colleage
GetConB(){return m_ClB;}

void DoActionFromAtoB(){m_ClB->SetState(m_ClA->GetState());}

void DoActionFromBtoA(){m_ClA->SetState(m_ClB->GetState());}

void IntroColleage(Colleage ClA,Colleage ClB)

{

m_ClA=ClA;m_ClB=ClB;

}

private:

Colleage m_ClA;

Colleage
m_ClB
;

};


void ConcreteColleageA::Action()

{

m_mdt->DoActionFromAtoB();

cout<<"CONB "<GetState()<\
}\
\void ConcreteColleageB::Action()\
\
{\
\
m_mdt->DoActionFromBtoA();

cout<<"CONA "<GetState()<\
}\
\\\\\void main()\
\
{\
\
ConcreteMediator* m=new ConcreteMediator();\
\
ConcreteColleageA* c1=new ConcreteColleageA(m);\
\
ConcreteColleageB* c2=new ConcreteColleageB(m);\
\
m->IntroColleage(c1,c2);
c1->SetState("jackill");

c1->Action();

c2->SetState("rukawa");

c2->Action();

cout<\
\\c1->SetState("new");

c1->Action();

c2->Action();

cout<<endl;

}

原文链接: https://www.cnblogs.com/ustc11wj/archive/2011/05/31/2610902.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/26508

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午4:09
下一篇 2023年2月8日 上午4:09

相关推荐