1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 class Colleague; 7 8 class Mediator 9 { 10 public: 11 virtual void Send(string strMessage, Colleague* pstColleague) = 0; 12 }; 13 14 class Colleague 15 { 16 public: 17 Colleague(Mediator* pstMediator): m_pstMediator(pstMediator) 18 { 19 20 } 21 22 virtual void Send(string strMes) = 0; 23 24 virtual void Notify(string strMes) = 0; 25 26 protected: 27 Mediator* m_pstMediator; 28 }; 29 30 class ConcreteColleagueA: public Colleague 31 { 32 public: 33 ConcreteColleagueA(Mediator* pstMediator):Colleague(pstMediator) 34 { 35 36 } 37 38 virtual void Send(string strMsg) 39 { 40 m_pstMediator->Send(strMsg, this); 41 42 } 43 44 virtual void Notify(string strMes) 45 { 46 cout<< "同事1得到消息: "<< strMes<< endl; 47 } 48 }; 49 50 class ConcreteColleagueB: public Colleague 51 { 52 public: 53 ConcreteColleagueB(Mediator* pstMediator):Colleague(pstMediator) 54 { 55 56 } 57 58 virtual void Send(string strMsg) 59 { 60 m_pstMediator->Send(strMsg, this); 61 62 } 63 64 virtual void Notify(string strMes) 65 { 66 cout<< "同事2得到消息: "<< strMes<< endl; 67 } 68 }; 69 70 class ConcreteMediator: public Mediator 71 { 72 public: 73 void SetColleagueA(ConcreteColleagueA* pstColleague) 74 { 75 m_pstColleagueA = pstColleague; 76 } 77 78 void SetColleagueB(ConcreteColleagueB* pstColleague) 79 { 80 m_pstColleagueB = pstColleague; 81 } 82 83 virtual void Send(string strMes, Colleague* pstColleague) 84 { 85 if (pstColleague == m_pstColleagueA) 86 { 87 m_pstColleagueB->Notify(strMes); 88 } 89 else 90 { 91 m_pstColleagueA->Notify(strMes); 92 } 93 } 94 95 private: 96 ConcreteColleagueA* m_pstColleagueA; 97 ConcreteColleagueB* m_pstColleagueB; 98 }; 99 100 int main(int argc, char* argv[]) 101 { 102 ConcreteMediator* pstMediatorA = new ConcreteMediator(); 103 104 ConcreteColleagueA* pstColleagueA = new ConcreteColleagueA(pstMediatorA); 105 ConcreteColleagueB* pstColleagueB = new ConcreteColleagueB(pstMediatorA); 106 107 pstMediatorA->SetColleagueA(pstColleagueA); 108 pstMediatorA->SetColleagueB(pstColleagueB); 109 110 111 pstColleagueA->Send("How are you?"); 112 pstColleagueB->Send("I am fine, Thank You!"); 113 114 return 0; 115 } 116 //////////////////////////////////////////// 117 [root@ ~/learn_code/design_pattern/21_mediator]$ ./mediator 118 同事2得到消息: How are you? 119 同事1得到消息: I am fine, Thank You!
原文:http://www.cnblogs.com/070412-zwc/p/6901434.html