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发送)");
}
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发送)"); }
相关文章推荐
- C++设计模式之中介者模式
- 设计模式C++实现(13)——中介者模式
- 设计模式C++实现(13)——中介者模式
- C++设计模式——中介者模式
- 设计模式C++实现(13)——中介者模式
- 我所理解的设计模式(C++实现)——中介者模式(Mediator Pattern)
- C++与设计模式(13)——中介者模式
- c++设计模式--中介者模式
- C++设计模式——中介者模式
- c++设计模式之中介者模式
- 设计模式C++实现(13)——中介者模式
- 我所理解的设计模式(C++实现)——中介者模式(Mediator Pattern)
- 设计模式C++版:第十三式中介者模式
- C++设计模式之中介者模式
- 设计模式C++实现(13)——中介者模式
- 设计模式C++实现(13)——中介者模式
- c++设计模式之中介者模式
- 我所理解的设计模式(C++实现)——中介者模式(Mediator Pattern)
- 设计模式C++实现(13)——中介者模式
- C++设计模式——中介者模式