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

c++设计模式之中介者模式

2012-09-30 19:01 375 查看
[cpp]
view plaincopyprint?

/************************************************************************/

/* 中介者模式 */
/************************************************************************/

/*
场景:假如你新到一家公司,你对和你一组同时Colleague不了解,他对你也不了

这时你们就需要由另一个你们都认识人作为中介来进行相互通信,这有点类似于

网路编程中的cs架构
*/

#include <IOSTREAM>

using namespace std;

class Mediator;
/*抽象出同事类*/

class Colleague
{
protected:
Mediator *mediator;

public:
Colleague(Mediator *mediator)
{
this->mediator = mediator;

}

};

//抽象出中介者
class Mediator

{
public:
virtual void Send(char *message,Colleague *colleague) = 0;

};

//抽象出具体的同事
class ConcreteColleague1 :
public Colleague
{
public:
ConcreteColleague1(Mediator *mediator):Colleague(mediator)
{

}

public:
void Send(char *message)

{
mediator->Send(message,this);

}

void Notify(char *message)

{
cout<<"同事1得到信息:"<<message<<endl;

}

};

//抽象出具体的同事
class ConcreteColleague2 :
public Colleague
{
public:
ConcreteColleague2(Mediator *mediator):Colleague(mediator)

{

}

public:
void Send(char *message)

{
mediator->Send(message,this);

}

void Notify(char *message)

{
cout<<"同事2得到信息:"<<message<<endl;;

}

};

//具体的中介者类
class ConcreteMeditor :
public Mediator
{
private:
ConcreteColleague1 *colleague1;
ConcreteColleague2 *colleague2;

public:
ConcreteMeditor()
{
this->colleague1 = colleague1;

this->colleague2 = colleague2;

}

void Send(char *message,Colleague *colleague)

{
if(colleague == colleague1)

{
colleague2->Notify(message);
}else
{
colleague1->Notify(message);
}
}

void Set(ConcreteColleague1 *colleague1,ConcreteColleague2 *colleague2)

{
this->colleague1 = colleague1;

this->colleague2 = colleague2;

}

};

void main()
{

ConcreteMeditor *m = new ConcreteMeditor;

ConcreteColleague1 *c1 = new ConcreteColleague1(m);

ConcreteColleague2 *c2 = new ConcreteColleague2(m);

m->Set(c1,c2);

c1->Send("你吃过饭了?(同事1发送)");

c2->Send("没有(同事2发送)");

}

/************************************************************************/
/*                           中介者模式                                 */
/************************************************************************/

/*
场景:假如你新到一家公司,你对和你一组同时Colleague不了解,他对你也不了
这时你们就需要由另一个你们都认识人作为中介来进行相互通信,这有点类似于
网路编程中的cs架构
*/

#include <IOSTREAM>

using namespace std;

class Mediator;
/*抽象出同事类*/
class Colleague
{
protected:
Mediator *mediator;

public:
Colleague(Mediator *mediator)
{
this->mediator = mediator;
}

};

//抽象出中介者
class Mediator
{
public:
virtual void Send(char *message,Colleague *colleague) = 0;
};

//抽象出具体的同事
class ConcreteColleague1 : public Colleague
{
public:
ConcreteColleague1(Mediator *mediator):Colleague(mediator)
{

}

public:
void Send(char *message)
{
mediator->Send(message,this);
}

void Notify(char *message)
{
cout<<"同事1得到信息:"<<message<<endl;
}

};

//抽象出具体的同事
class ConcreteColleague2 : public Colleague
{
public:
ConcreteColleague2(Mediator *mediator):Colleague(mediator)
{

}

public:
void Send(char *message)
{
mediator->Send(message,this);
}

void Notify(char *message)
{
cout<<"同事2得到信息:"<<message<<endl;;
}

};

//具体的中介者类
class ConcreteMeditor : public Mediator
{
private:
ConcreteColleague1 *colleague1;
ConcreteColleague2 *colleague2;

public:
ConcreteMeditor()
{
this->colleague1 = colleague1;
this->colleague2 = colleague2;
}

void Send(char *message,Colleague *colleague)
{
if(colleague == colleague1)
{
colleague2->Notify(message);
}else
{
colleague1->Notify(message);
}
}

void Set(ConcreteColleague1 *colleague1,ConcreteColleague2 *colleague2)
{
this->colleague1 = colleague1;
this->colleague2 = colleague2;
}

};

void main()
{

ConcreteMeditor *m = new ConcreteMeditor;

ConcreteColleague1 *c1 = new ConcreteColleague1(m);
ConcreteColleague2 *c2 = new ConcreteColleague2(m);

m->Set(c1,c2);

c1->Send("你吃过饭了?(同事1发送)");
c2->Send("没有(同事2发送)");

}


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