设计模式之中介者模式
来源:互联网 发布:rhino mac 破解 编辑:程序博客网 时间:2024/06/07 05:33
中介者模式(mediator pattern)属于行为模式,通常,一个程序里包含了多个类,多个类之间要进行交互,这种交互就使得系统各个部分耦合在一起,但系统越复杂,这种耦合就使得系统的重构和维护非常困难,中介者模式就是用于这种相互之间的交互行为导致的耦合问题,它通过一个中介类把类直接通信交互的部分封装起来,各个类相互之间并不需要直接交互,交互由中介类来代理,比如我们去租房子,我们都是通过中介来实现。
下面是中介者模式的C++实现,代码可到本人github网页下载:设计模式例子
/* * Example of 'Mediator' design pattern. * Copyright (C) 2016 Leo Wang * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */#include <string>#include <map>#include <iostream>using namespace std;class IMediator{public: virtual void Send(const string& colleagueid,const string& msg)=0;};class IColleague{public: string s_id; IMediator* cp_mediator;public: string getid() {return s_id;}; void RegistMediator(IMediator* p_mediator) { cp_mediator=p_mediator; }; virtual void Send(const string& colleadgeid,const string& msg){}; virtual void Receive(const string& msg){};public: IColleague(const string& id) { s_id=id; };};class CConcreteColleagueA:public IColleague{public: CConcreteColleagueA(const string& id):IColleague(id) {};public: void Send(const string& colleadgeid,const string& msg) { cout<<s_id+" Calling "+colleadgeid<<endl; cp_mediator->Send(colleadgeid,msg); }; void Receive(const string& msg) { cout<<s_id+" Received msg: "+msg<<endl; };};class CConcreteColleagueB:public IColleague{public: CConcreteColleagueB(const string& id):IColleague(id) {};public: void Send(const string& colleadgeid,const string& msg) { cout<<s_id+" Calling "+colleadgeid<<endl; cp_mediator->Send(colleadgeid,msg); }; void Receive(const string& msg) { cout<<s_id+" Received msg: "+msg<<endl; };};class CConcreteColleagueC:public IColleague{public: CConcreteColleagueC(const string& id):IColleague(id) {};public: void Send(const string& colleadgeid,const string& msg) { cout<<s_id+" Calling "+colleadgeid<<endl; cp_mediator->Send(colleadgeid,msg); }; void Receive(const string& msg) { cout<<s_id+" Received msg: "+msg<<endl; };};class CConcreteMediator:public IMediator{public: map<string,IColleague*> m_colleagues;public: bool IsRegisted(string id) { return m_colleagues.find(id)!=m_colleagues.end(); }; void Register(IColleague& colleague) { if(!IsRegisted(colleague.getid())) { colleague.RegistMediator(this); m_colleagues[colleague.getid()]=&colleague; }; }; void Send(const string& colleagueid,const string& msg) { if(IsRegisted(colleagueid)) { m_colleagues[colleagueid]->Receive(msg); }; };};void main(void){ CConcreteMediator c_mediator; CConcreteColleagueA c_colleageA("A"); CConcreteColleagueB c_colleageB("B"); CConcreteColleagueC c_colleageC("C"); c_mediator.Register(c_colleageA); c_mediator.Register(c_colleageB); c_mediator.Register(c_colleageC); c_colleageA.Send("B","Message from A to B!"); c_colleageA.Send("C","Message from A to C!");};
1 0
- 设计模式之中介者
- 设计模式 之 中介者
- 设计模式之中介者
- 设计模式之Mediator中介者模式
- 设计模式之中介者模式
- 设计模式之中介者模式
- 八 设计模式之中介者模式
- 设计模式之--中介者模式
- 设计模式之中介者模式
- c++设计模式之中介者模式
- 设计模式之-中介者模式
- 设计模式之中介者模式
- c++设计模式之中介者模式
- 设计模式之中介者模式(Mediator)
- 设计模式之中介者模式
- 设计模式之中介者模式
- JAVA-设计模式之中介者模式
- 大话设计模式之中介者模式
- 飞哥教你微信公众号开发-6-用户管理
- for循环控制
- PAT-BL-1007
- DOM基础
- Java线程(CountDownLatch、CyclicBarrier、Semaphore)并发控制工具类
- 设计模式之中介者模式
- Linux 系统中僵尸进程
- 百度地图使用模拟器报错java.lang.IllegalArgumentException: No config chosen
- 自己开发项目历程
- 【JDK源码阅读3-util】Collection-List---ArrayList
- 救济金发放
- 从Image Caption Generation理解深度学习(part I)
- 在Notepad++中运行python代码以及 运行后只是一闪而过
- Android 简单数独开发