1. 程式人生 > >設計模式——中介者模式/調停者模式(C++實現)

設計模式——中介者模式/調停者模式(C++實現)

con 分享 else .cn sign name 得到 ted esp

技術分享

  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!

設計模式——中介者模式/調停者模式(C++實現)