3_10 MediaMode 中介者模式
生活随笔
收集整理的這篇文章主要介紹了
3_10 MediaMode 中介者模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// 定義:用一個中介對象來封裝一系列的對象交互
//
// 模式舉例:各個國家通過聯合國進行交互
//
// 模式特點:典型的減小類之間的耦合度
//
//#include<iostream>
using namespace std;class Colleague;class Mediator
{
public:virtual void send(string msg, Colleague * c)=0;
};class Colleague
{
public:Colleague(Mediator * m):m_mediator(m){}//此處是不是寫上接收者?virtual void send(string msg)=0;virtual void notify(string msg, Colleague * c)=0;protected:Mediator * m_mediator;
};class ConcreteColleagueA : public Colleague
{
public:ConcreteColleagueA(Mediator * m):Colleague(m){}virtual void send(string msg){m_mediator->send(msg, this);}virtual void notify(string msg, Colleague * c){cout <<"ConcreteColleagueA 收到消息:"<<msg<<endl;}
};class ConcreteColleagueB : public Colleague
{
public:ConcreteColleagueB(Mediator * m):Colleague(m){}virtual void send(string msg){m_mediator->send(msg, this);}virtual void notify(string msg, Colleague * c){cout <<"ConcreteColleagueB 收到消息:"<<msg<<endl;}
};class ConcreteMediator : public Mediator
{
public:void setColleague(Colleague *c1, Colleague *c2){m_colleagueA = c1;m_colleagueB = c2;}virtual void send(string msg, Colleague * c){if(c == m_colleagueA){m_colleagueB->notify(msg,c);}else if(c == m_colleagueB){m_colleagueA->notify(msg,c);}}private:Colleague * m_colleagueA;Colleague * m_colleagueB;
};int main()
{ConcreteMediator * pConcreteMediator = new ConcreteMediator();Colleague * pColleagueA = new ConcreteColleagueA(pConcreteMediator);Colleague * pColleagueB = new ConcreteColleagueB(pConcreteMediator);pConcreteMediator->setColleague(pColleagueA,pColleagueB);pColleagueA->send("你好");return 0;
}
?
總結
以上是生活随笔為你收集整理的3_10 MediaMode 中介者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3_9 VisitorMode 访问者模
- 下一篇: 3_5 ResponsibilityCh