- 浏览: 369917 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (335)
- C++ (190)
- 设计模式 (43)
- 数据库技术 (5)
- 网络编程 (11)
- 自动化测试 (6)
- Linux (13)
- OpenSSL (10)
- MS Crypt API (5)
- SCM (2)
- English (4)
- Android (10)
- EMV规范 (1)
- Saturn Platform (0)
- C (10)
- SQL (2)
- ASP.NET (3)
- 英语口语学习 (3)
- 调试工具 (21)
- 编译技术 (5)
- UML (1)
- 项目管理 (5)
- 敏捷开发 (2)
- Http Server (6)
- 代码审查、代码分析 (5)
- 面试基础 (10)
- 重点知识 (16)
- STL (6)
- Efficient C++资料 (8)
- 数据结构和算法 (7)
- 读书笔记 (0)
- 开源项目 (4)
- 多线程 (2)
- Console App (6)
- 个人开源项目 (4)
- IBM DevelopWorks (4)
- Java (16)
- 内存泄漏相关调试和检测 (13)
- 软件测试相关技术 (2)
- C# (11)
- Apple Related (1)
- 软件测试和管理 (2)
- EMV (1)
- Python (1)
- Node.js (6)
- JavaScript (5)
- VUE (1)
- Frontend (1)
- Backend (4)
- RESTful API (3)
- Firebase (3)
最新评论
-
u013189503:
来个密码吧
[C++][Logging] 项目中写日志模块的实现 -
wyf_vc:
来个密码啊!!
[C++][Logging] 项目中写日志模块的实现
头文件
//MediatorPattern.h #ifndef MEDIATOR_PATTERN_H #define MEDIATOR_PATTERN_H #include <Windows.h> #include <iostream> using namespace std; namespace MediatorPattern { class Mediator; class Colleague { public: Colleague(Mediator* pMediator); virtual void Send(const char* pszMsg) = 0; virtual void Notify(const char* pszMsg) = 0; protected: Mediator* m_pMediator; }; class ConcreteColleagueA : public Colleague { public: ConcreteColleagueA(Mediator* pMediator); virtual void Send(const char* pszMsg); virtual void Notify(const char* pszMsg); }; class ConcreteColleagueB : public Colleague { public: ConcreteColleagueB(Mediator* pMediator); virtual void Send(const char* pszMsg); virtual void Notify(const char* pszMsg); }; ////////////////////////////////////////////////////////////////////////// class Mediator { public: virtual void Send(const char* pszMsg, Colleague* pColleague) = 0; }; class ConcreteMediator : public Mediator { public: virtual void Send(const char* pszMsg, Colleague* pColleague); void SetColleagueA(Colleague* pColleague); void SetColleagueB(Colleague* pColleague); private: // The Mediator knows all the Colleague ConcreteColleagueA* m_pConcreteColleagueA; ConcreteColleagueB* m_pConcreteColleagueB; }; ////////////////////////////////////////////////////////////////////////// void MediatorPattern_Test(); } #endif
实现
#include "MediatorPattern.h" #include <iostream> using namespace std; #define SAFE_DELETE(p) if (p) { delete p; p = NULL; } namespace MediatorPattern { ////////////////////////////////////////////////////////////////////////// Colleague::Colleague(Mediator* pMediator) : m_pMediator(pMediator) { cout << "Colleague::Colleague" << endl; } ////////////////////////////////////////////////////////////////////////// ConcreteColleagueA::ConcreteColleagueA(Mediator* pMediator) : Colleague(pMediator) { cout << "ConcreteColleagueA::ConcreteColleagueA" << endl; } void ConcreteColleagueA::Send(const char* pszMsg) { cout << "ConcreteColleagueA::Send" << endl; cout << "Send request to Mediator:" << pszMsg << endl; m_pMediator->Send(pszMsg, this); } void ConcreteColleagueA::Notify(const char* pszMsg) { cout << "ConcreteColleagueA::Notify " << endl; cout << "Receive response from Mediator:" << pszMsg << endl; } ////////////////////////////////////////////////////////////////////////// ConcreteColleagueB::ConcreteColleagueB(Mediator* pMediator) : Colleague(pMediator) { cout << "ConcreteColleagueA::ConcreteColleagueB" << endl; } void ConcreteColleagueB::Send(const char* pszMsg) { cout << "ConcreteColleagueB::Send" << endl; cout << "Send request to Mediator:" << pszMsg << endl; m_pMediator->Send(pszMsg, this); } void ConcreteColleagueB::Notify(const char* pszMsg) { cout << "ConcreteColleagueB::Notify " << endl; cout << "Receive response from Mediator:" << pszMsg << endl; } ////////////////////////////////////////////////////////////////////////// void ConcreteMediator::Send(const char* pszMsg, Colleague* pColleague) { cout << "ConcreteMediator::Send -> GetMessage:" << pszMsg << endl; ConcreteColleagueA* pTemp = dynamic_cast<ConcreteColleagueA*>(pColleague); if (NULL == pTemp) { cout<<"The message is from ConcreteColleagueA. Now mediator forward it to ConcreteColleagueB"<<endl; if (m_pConcreteColleagueB != NULL) { pTemp->Notify("[ConcreteColleagueB]ConcreteMediator::Send->Notify"); } } else { if (m_pConcreteColleagueA != NULL) { pTemp->Notify("[ConcreteColleagueA]ConcreteMediator::Send->Notify"); } } } void ConcreteMediator::SetColleagueA(Colleague* pColleague) { m_pConcreteColleagueA = dynamic_cast<ConcreteColleagueA*>(pColleague); } void ConcreteMediator::SetColleagueB(Colleague* pColleague) { m_pConcreteColleagueB = dynamic_cast<ConcreteColleagueB*>(pColleague); } ////////////////////////////////////////////////////////////////////////// void MediatorPattern_Test() { // Create the mediator Mediator *pMediator = new ConcreteMediator(); Colleague *pColleague1 = new ConcreteColleagueA(pMediator); Colleague *pColleague2 = new ConcreteColleagueB(pMediator); ConcreteMediator *pConcreteMediator = dynamic_cast<ConcreteMediator *>(pMediator); pConcreteMediator->SetColleagueA(pColleague1); pConcreteMediator->SetColleagueB(pColleague2); char message[260] = "Where are you from?"; pColleague1->Send(message); } }
客户端
#include "MediatorPattern.h" #include <iostream> #include <sstream> #include <string> #include <list> using namespace std; using namespace VisitorPattern; void main() { MediatorPattern_Test(); }
运行结果
- MediatorPattern.zip (1.3 KB)
- 下载次数: 0
- Diagram.zip (2.4 MB)
- 下载次数: 0
发表评论
-
FreeRTOS
2022-03-05 16:31 248Ref https://blog.csdn.net/weix ... -
串口通讯相关
2018-11-02 13:44 411https://bbs.csdn.net/wap/topics ... -
[转]C++验证IP是否可以PING通
2018-10-30 17:54 1325https://www.cnblogs.com/guoyz13 ... -
C++/MFC 換皮膚
2018-10-20 11:05 477https://blog.csdn.net/u01123991 ... -
WinCE 截屏 - C++ 代碼
2018-08-31 09:45 574// this function create a bmp ... -
Android NDK搭建環境
2017-11-27 13:25 580https://www.cnblogs.com/ut2016- ... -
8583协议相关
2017-10-17 13:38 5738583相关资料,整理中... -
Java高级应用之JNI
2017-06-19 09:00 600参考link http://www.cnblogs.com/l ... -
C++实现ping功能
2017-04-18 11:21 2155基础知识 ping的过程是向目的IP发送一个type=8的I ... -
OpenSSL 编译环境搭建
2017-03-27 15:01 9061 安裝VS2008到 c:\Program Files (x ... -
最优非对称加密填充(OAEP)
2017-03-25 14:53 1582OpenSSL命令---rsautl http://blog. ... -
[Platform Builder] 设置SVM OS build Env
2016-11-10 11:39 01 copy one OSDesign Project to ... -
[Windows] System Error Codes(GetLastError )0-----5999
2016-10-26 13:28 1881ERROR_SUCCESS 0 (0x0) T ... -
开源Windows驱动程序框架
2016-09-17 21:35 871转自 http://code.csdn.net/news/28 ... -
c/c++代码中执行cmd命令
2016-09-14 14:50 1908转自 http://blog.csdn.net/slixinx ... -
C#使用C++标准DLL实例(包含callback)
2016-09-11 19:44 1086C++编写标准Win32DLL如下 头文件 /***** ... -
C#调用C++的DLL搜集整理的所有数据类型转换方式
2016-09-09 16:07 969转自 http://www.cnblogs.com/zeroo ... -
WinCE CPU使用率计算 测试工具
2016-09-08 16:14 991转自 http://blog.csdn.net/jan ... -
switch在C++与C#中的一些差异
2016-09-08 15:19 810参考链接 http://blog.csdn.net/weiwe ... -
C++ 鼠标模拟程序
2016-09-04 12:09 1612转自 http://blog.csdn.net/weixinh ...
相关推荐
标题和描述均提到了"C#面向对象设计模式纵横谈(17):(行为型模式) Mediator 中介者模式",这明确指向了一个特定的设计模式——中介者模式(Mediator Pattern),并且是在C#语言环境下的应用。下面将详细阐述这一设计...
中介者模式(Mediator)是一种行为型设计模式,其核心思想在于通过引入一个中介者对象来封装一系列对象间的交互关系。在软件工程中,这种模式主要用于减少类之间复杂的直接通信,从而降低系统间的耦合性,提高可维护...
**中介者模式**是软件设计模式中的一种结构型模式,它的主要目的是降低多个对象之间的复杂交互,通过引入一个中介对象来统一这些交互。在实际应用中,当对象间的交互变得日益复杂,导致类与类之间的关系过于紧密时,...
中介者模式是一种行为设计模式,它用于减少多个对象之间的复杂交互,将这些对象通过一个共同的对象——中介者联系起来,使得各对象之间不再直接引用,而是通过中介者进行通信。这种模式降低了对象间的耦合度,提高了...
5. **中介者模式**:用一个中介对象来封装一系列对象间的交互,降低它们之间的耦合。 6. **观察者模式**:定义了一对多的依赖关系,当一个对象的状态改变时,所有依赖它的对象都会得到通知并自动更新。 7. **备忘录...
中介者模式是一种设计模式,它的主要目的是降低对象之间的耦合度,使得对象之间的交互更加清晰。在实际的应用中,当多个对象需要频繁交互且关系复杂时,直接的相互依赖会导致系统结构变得难以理解和维护。中介者模式...
**中介者模式(Mediator Pattern)**是一种行为设计模式,其主要目的是降低多个对象之间的通信复杂性,将这些对象的直接交互转化为与一个中心对象——中介者的交互。在C#中,中介者模式的应用能够有效地减少类之间的...
中介者模式是一种设计模式,它在软件工程中用于降低多个对象之间的复杂交互。在iOS开发中,当多个视图控制器或其他组件之间存在复杂的...通过阅读和分析这些代码,开发者可以深入理解中介者模式在iOS开发中的具体应用。
首先,让我们通过一个实际的例子来理解中介者模式。假设你正在开发一个聊天应用,用户之间可以发送消息。如果每个用户对象都直接与其他用户对象通信,那么代码将变得复杂且难以管理。此时,我们可以引入一个“聊天室...
**中介者模式(Mediator Pattern)**是一种行为设计模式,它定义了一个用来封装一系列对象交互的接口。在软件工程中,当多个对象之间存在复杂的相互依赖关系时,这种模式可以帮助我们降低系统的耦合度,使得各个对象...
在众多设计模式中,中介者模式是一种行为设计模式,它的主要目的是降低对象之间的耦合性,使得对象之间的通信更加清晰和简洁。本文将深入讲解中介者模式,并提供具体的实现代码。 中介者模式的核心思想是引入一个...
中介者模式是行为设计模式之一,其主要目的是降低多个对象之间的复杂性,通过引入一个中介对象来协调这些对象的交互。这种模式有助于减少对象之间的耦合,使得各个对象可以独立地进行修改和扩展。 **概念理解** 1....
中介者模式是一种设计模式,属于行为模式类别,它在软件工程中扮演着重要的角色,尤其在处理对象之间的复杂交互时。这种模式的主要目的是减少对象之间的耦合度,通过引入一个中介对象来协调多个对象之间的通信,使得...
总结起来,中介者模式是一种有效的设计模式,它在多对象交互场景中起到桥梁和协调的作用,使系统更易于理解和维护。在外卖示例中,`DeliveryPlatform`作为一个中介者,使得顾客、餐厅和送餐员的交互变得更加有序和...
**中介者模式(Mediator)**是一种设计模式,属于行为设计模式范畴,它定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。在软件工程中,中介者模式常...
在软件工程中,设计模式是一种被广泛采用的解决常见问题的经验总结,其中中介者模式是结构型设计模式的一种。它的主要目标是降低对象之间的耦合度,使得对象之间的关系更加清晰,同时也提高了代码的可维护性和可扩展...
**iOS的中介者设计模式** 中介者设计模式是一种行为设计模式,它主要用来减少对象之间的耦合,将多个对象间...通过理解和实践中介者模式,开发者能够更好地处理复杂的对象交互问题,创建出更加健壮和灵活的软件系统。