设计模式之十八------Mediator(中介者)
来源:互联网 发布:淘宝客会终止合作吗 编辑:程序博客网 时间:2024/05/03 16:56
问题:
在类的交互中,如果有多个类,他们之间需要相互调用,那么每个类都需要持有其他的类;这样他们之间的关系十分复杂,并且占用大量的内存空间;
解决方案:
建立一个中介机构,这个中介机构类持有所有的这些类。所有的类持有这个中介机构。类需要交互时,只需要和这个中介机构进行交互就足矣了,中介机构负责和其他类交互;
这样就把多对多转化成了一对多;复杂度大量降低了。
实现代码如下:
#include <IOSTREAM>#include<STRING>using namespace std;class College;class Mediator{public:virtual void ActionAToB()=0;virtual void ActionBToA()=0;virtual void SetA(College *a)=0;virtual void SetB(College *b)=0;protected:Mediator(){}virtual ~Mediator(){}};class ConcreateMediator:public Mediator{public:virtual void ActionAToB();virtual void ActionBToA();ConcreateMediator();ConcreateMediator(College *a,College *b);virtual void SetA(College *a);virtual void SetB(College *b);private:College *_a,*_b;};class College{public:void SetState(const string &str){state=str;}string GetState(){return state;} virtual void Action()=0;//信息同步void SetMediator(Mediator *med){mediator=med;}protected:College(Mediator *med,string str){mediator=med;state=str;}College(){}virtual ~College(){}Mediator *mediator;private:string state;};class ConcreateCollege1:public College{public:virtual void Action(){mediator->ActionAToB();}ConcreateCollege1(Mediator *med,string str):College(med,str){}ConcreateCollege1(){}~ConcreateCollege1(){}};class ConcreateCollege2:public College{public:virtual void Action(){mediator->ActionBToA();}ConcreateCollege2(Mediator *med,string str):College(med,str){}ConcreateCollege2(){}~ConcreateCollege2(){}};void ConcreateMediator::ActionAToB(){cout<<"A,B的状态:"<<_a->GetState()<<","<<_b->GetState()<<endl;_b->SetState(_a->GetState());cout<<"切换后A,B的状态:"<<_a->GetState()<<","<<_b->GetState()<<endl;}void ConcreateMediator::ActionBToA(){cout<<"A,B的状态:"<<_a->GetState()<<","<<_b->GetState()<<endl;_a->SetState(_b->GetState());cout<<"切换后A,B的状态:"<<_a->GetState()<<","<<_b->GetState()<<endl;}ConcreateMediator::ConcreateMediator(){}ConcreateMediator::ConcreateMediator(College *a,College *b){_a=a;_b=b;}void ConcreateMediator::SetA(College *a){_a=a;}void ConcreateMediator::SetB(College *b){_b=b;}void main(){College *college1=new ConcreateCollege1;College *college2=new ConcreateCollege2;Mediator *mediator=new ConcreateMediator(college1,college2);college1->SetMediator(mediator);college2->SetMediator(mediator);college1->SetState("HELLO");college1->Action();college2->SetState("GOGO");college2->Action();}
- 设计模式之十八------Mediator(中介者)
- 设计模式学习笔记(十八)—Mediator中介者模式
- 设计模式之Mediator中介者模式
- 设计模式之中介者模式(Mediator)
- 设计模式之中介者模式,mediator
- 设计模式之中介者模式(Mediator)
- 设计模式之中介者模式(Mediator)
- 设计模式之中介者模式Mediator
- 设计模式之中介者模式(Mediator)
- 设计模式之Mediator(中介者)
- 设计模式之Mediator(中介者)
- 设计模式之Mediator(中介者)
- 设计模式之Mediator(中介者)
- 设计模式之Mediator(中介者)
- 设计模式(十九)之Mediator(中介者)
- GOF设计模式之MEDIATOR(中介者)
- Mediator(中介者)设计模式
- 【设计模式学习笔记十八】【行为模式】【中介者模式(Mediator)】
- Python + OpenCV2.3.1 开发环境搭建
- 2012-10-25 11gR2 "ADMINISTRATOR'S GUIDE" page 219 - 251
- 常见的 数据库 ---sql语句
- Django 中接收 URL 中的中文参数
- ipc 应用(需要试验,在xp下基本失效)
- 设计模式之十八------Mediator(中介者)
- C/C++ sizeof函数详解
- C++多重继承乱象
- 在C++中用栈实现进制之间的转换
- Linux Shell脚本中字符串比较表达式问题
- 借助 Django 的 smart_str 和 smart_unicode 进行编码转换
- CTL_CODE定义说明
- asp.net三层架构详解
- js倒计时