Mediator 模式
来源:互联网 发布:智慧城市大数据概念股 编辑:程序博客网 时间:2024/05/17 03:24
在面向对象系统的设计和开发过程中,对象之间的交互和通信是最为常见的情况,因为对象间的交互本身就是一种通信。在系统比较小的时候,可能对象间的通信不是很多、对象也比较少,我们可以直接硬编码到各个对象的方法中。但是当系统规模变大,对象的量变引起系统复杂度的急剧增加,对象间的通信也变得越来越复杂,这时候我们就要提供一个专门处理对象间交互和通信的类,这个中介者就是 Mediator 模式
1 //////////Colleage.h//////////////////////////////////////////////////////////////// 2 #pragma once 3 #include <string> 4 using namespace std; 5 class Mediator ; 6 class Colleage 7 { 8 public: 9 virtual ~Colleage();10 virtual void Action() = 0 ;11 virtual void SetState(const string& sdt) = 0 ;12 virtual string GetState() = 0 ;13 14 protected:15 Colleage();16 Colleage(Mediator* mdt);17 Mediator* _mdt ;18 19 private:20 };21 22 class ConcreteColleageA : public Colleage23 {24 public:25 ~ConcreteColleageA();26 ConcreteColleageA();27 ConcreteColleageA(Mediator* mdt);28 void Action();29 void SetState(const string& sdt);30 string GetState();31 32 protected:33 private:34 string _sdt ;35 };36 37 class ConcreteColleageB : public Colleage38 {39 public:40 ~ConcreteColleageB();41 ConcreteColleageB();42 ConcreteColleageB(Mediator* mdt);43 void Action();44 void SetState(const string& sdt);45 string GetState();46 47 protected:48 private:49 string _sdt ;50 };
1 ///////////Mediator.h/////////////////////////////////////////////////////////////// 2 #pragma once 3 class Colleage; 4 class Mediator 5 { 6 public: 7 virtual ~Mediator(); 8 virtual void DoActionFromAtoB() = 0 ; 9 virtual void DoActionFromBtoA() = 0 ;10 protected:11 Mediator();12 private:13 };14 15 class ConcreteMediator : public Mediator16 {17 public:18 ~ConcreteMediator();19 ConcreteMediator();20 ConcreteMediator(Colleage* clgA ,Colleage* clgB);21 22 void SetColleageA( Colleage* clgA );23 void SetColleageB( Colleage* clgB );24 25 Colleage* GetColleageA();26 Colleage* GetColleageB();27 28 void IntroColleage(Colleage* clgA ,Colleage* clgB);29 30 void DoActionFromAtoB();31 void DoActionFromBtoA();32 protected:33 private:34 Colleage* _clgA ;35 Colleage* _clgB ;36 };
1 ////////////Colleage.cpp////////////////////////////////////////////////////////////// 2 #include "Colleage.h" 3 #include "Mediator.h" 4 #include <string> 5 #include <iostream> 6 using namespace std; 7 Colleage::~Colleage() 8 { 9 10 }11 Colleage::Colleage()12 {13 14 }15 Colleage::Colleage(Mediator* mdt)16 {17 this->_mdt = mdt ;18 }19 20 ConcreteColleageA::~ConcreteColleageA()21 {22 23 }24 ConcreteColleageA::ConcreteColleageA()25 {26 27 }28 ConcreteColleageA::ConcreteColleageA(Mediator* mdt):Colleage(mdt)29 {30 31 }32 void ConcreteColleageA::SetState(const string& sdt)33 {34 this->_sdt = sdt ;35 }36 string ConcreteColleageA::GetState()37 {38 return _sdt ;39 }40 41 void ConcreteColleageA::Action()42 {43 this->_mdt->DoActionFromAtoB();44 cout<<"把消息:"<<this->GetState()<<"传给B"<<endl;45 }46 47 ConcreteColleageB::~ConcreteColleageB()48 {49 50 }51 ConcreteColleageB::ConcreteColleageB()52 {53 54 }55 ConcreteColleageB::ConcreteColleageB(Mediator* mdt):Colleage(mdt)56 {57 58 }59 void ConcreteColleageB::SetState(const string& sdt)60 {61 this->_sdt = sdt ;62 }63 string ConcreteColleageB::GetState()64 {65 return _sdt ;66 }67 68 void ConcreteColleageB::Action()69 {70 this->_mdt->DoActionFromBtoA();71 cout<<"把消息:"<<this->GetState()<<"传给A"<<endl;72 }
1 //////////Mediator.cpp//////////////////////////////////////////////////////////////// 2 #include "Mediator.h" 3 #include "Colleage.h" 4 Mediator::Mediator() 5 { 6 7 } 8 Mediator::~Mediator() 9 {10 11 }12 13 ConcreteMediator::ConcreteMediator()14 {15 16 }17 ConcreteMediator::~ConcreteMediator()18 {19 20 }21 ConcreteMediator::ConcreteMediator(Colleage* clgA ,Colleage* clgB)22 {23 _clgA = clgA ;24 _clgB = clgB ;25 }26 void ConcreteMediator::DoActionFromAtoB()27 {28 _clgB->SetState(_clgA->GetState());29 }30 void ConcreteMediator::DoActionFromBtoA()31 {32 _clgA->SetState(_clgB->GetState());33 }34 35 void ConcreteMediator::SetColleageA( Colleage* clgA )36 {37 _clgA = clgA ;38 }39 void ConcreteMediator::SetColleageB( Colleage* clgB )40 {41 _clgB = clgB ;42 }43 Colleage* ConcreteMediator::GetColleageA()44 {45 return _clgA ;46 }47 Colleage* ConcreteMediator::GetColleageB()48 {49 return _clgB ;50 }51 52 void ConcreteMediator::IntroColleage(Colleage* clgA ,Colleage* clgB)53 {54 _clgA = clgA ;55 _clgB = clgB ;56 }
1 //////main.cpp//////////////////////////////////////////////////////////////////// 2 #include "Colleage.h" 3 #include "Mediator.h" 4 #include <iostream> 5 using namespace std; 6 int main() 7 { 8 ConcreteMediator* m = new ConcreteMediator(); 9 Colleage* c1 = new ConcreteColleageA(m);10 Colleage* c2 = new ConcreteColleageB(m);11 12 m->IntroColleage(c1, c2);13 c1->SetState("你好!");14 c2->SetState("你是谁");15 16 cout<<c1->GetState()<<endl;17 cout<<c2->GetState()<<endl;18 19 c1->Action();20 21 cout<<c2->GetState()<<endl;22 getchar();23 return 0 ;24 25 }
0 0
- Mediator模式
- MEDIATOR 模式
- Mediator模式
- Mediator 模式
- Mediator 模式
- Mediator模式
- Mediator模式
- Mediator模式
- Mediator模式
- Mediator模式
- Mediator 模式
- Mediator模式
- Mediator模式
- Mediator模式
- [设计模式]Mediator模式
- 中介者(Mediator)模式
- Mediator中介者模式
- 设计模式之Mediator
- Memento 模式
- 客又多 - 全网独家研发(java)微信公众号营销系统发布
- 求一棵普通树的两个结点的最低公共祖先
- 斐波那契查找
- 有些路,只能一个人走
- Mediator 模式
- Sudoku Solver
- Command 模式
- 完整java开发中JDBC连接数据库代码和步骤
- 复制构造函数 与 赋值操作函数
- 关于 const 成员函数
- 用3种方法在 operator= 中处理“自我赋值”
- View.setTag()的作用
- 多平台适配的代码设计