[设计模式]行为模式-中介者(C++描述)

C++行为型模式-中介者模式 1 模式介绍 中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互,中介者使得个对象不需要显示地相互引用,从而使得耦合松散,而且可以独立地改变它们之间的交互。 2 模式结构 (1)抽象中介者(Mediator) 抽象中介者用于定义一个接口,该接口用于与各同事对象之间的通信; (2)具体中介者(ConcreteMediator) 具体中介者是抽象中介者的子类,通过协调各个对象来实现协作行为,了解并维护它对各个同事对象的引用; (3)抽象同事类(Colleag. 阅读详情

 [设计模式]行为模式-中介者(C++描述)

second60 20180531

1. 中介者定义

中介者模式提供对象间的交互和通讯封装在一个类中,各个对象间的通信不必显势去声明和引用,大大降低了系统的复杂性。

 

在面向对象的软件设计与开发过程中,根据单一职责原则,尽量将对象细化,使其只负责或呈现单一的职责,将行为分布到各个对象中。

 

对于一个模块或系统,可能由很多对象构成,而且这些对象之间存在相互的引用,在最坏的情况下,每一个对象都知道其他所有对象,这复杂了对象之间的联系。虽然将一个系统分割成许多对象通常可以增强复用性,但是对象间相互连接的激增又会降低其可复用性,大量相互连接使得一个对象似乎不太可能在没有其他对象的支持下工作,系统表现为一个不可分割的整体,对系统的行为进行任何较大的改运都会十分困难。

结果是不得不定义大量的子类以定制系统的行为。因此,为了减少对象两两之间的复杂的引用关系,使之成为一个松耦合的系统,我们需要使用中介者模式。

2. 中介者模式结构图

 

  

分析:

1. 中介者父类Mediator: 中介者定义一个接口用于各Colleague对象通信。

2. 具体中介者:通过协调各同事对象实现协作行为,了解并维护它的各同事。

3. 抽事同事类:定义同事类接口,定义各同事公有方法

4. 具体同事类:实现抽象同事方法。每一个同时需要知道中介者对象;每个具体同事类只需要了解自已的行为。每一个同事对象在需与其他同事通信时,与它的中介者通信。

 

3. 代码

#include <string>

using namespace std;

class Mediator;

// 同事父类

class Colleage

{

public:

virtual ~Colleage(){}

virtual void Action() = 0;

virtual void SetState(const string& str) = 0;

virtual string GetState() = 0;

protected:

Colleage(){}

Colleage(Mediator* mdt)

{

_mdt = mdt;

}

Mediator* _mdt;

};

 

class ConcreteColleageA: public Colleage

{

public:

~ConcreteColleageA(){}

void Action(){_mdt->DoActionFromAtoB();}

void SetState(const string& str){_std = std;}

string GetState(){return _sdt;}

ConcreteColleageA(){}

ConcreteColleageA(Mediator* mdt):Colleage(mdt){}

private:

string _sdt;

};

 

class ConcreteColleageB: public Colleage

{

public:

~ConcreteColleageB(){}

void Action(){_mdt->DoActionFromBtoA();}

void SetState(const string& str){_std = std;}

string GetState(){return _sdt;}

ConcreteColleageB(){}

ConcreteColleageB(Mediator* mdt):Colleage(mdt){}

private:

string _sdt;

};

 

// 中介者父类

class Mediator

{

public:

virtual ~Mediator(){}

virtual void DoActionFromAtoB() = 0;

virtual void DoActionFromBtoA() = 0;

protected:

Mediator(){}

};

 

class ConcreteMediator: public Mediator

{

public:

ConcreteMediator(){}

ConcreteMediator(Colleage* clgA, Colleage* clgB)

{

_clgA = clgA;

_clgB = clgB;

}

~ConcreteMediator(){}

void SetConcreteColleageA(Colleage* clgA){

this->_clgA = clgA;

}

void SetConcreteColleageB(Colleage* clgB){

this->_clgB = clgB;

}

Colleage* GetConcreteColleageA(){return _clgA;}

Colleage* GetConcreteColleageB(){return _clgB;}

void IntroColleage(Colleage* clgA, Colleage* clgB){

_clgA = clgA;

_clgB = _clgB;

}

void DoActionFromAtoB(){

_clgB->SetState(_clgA->GetState());

}

void DoActionFromBtoA(){

_clgA->SetState(_clgB->GetState());

}

private:

Colleage* _clgA;

Colleage* _clgB;

};

 

 

int main()

{

ConcreteMediator* m = new ConcreteMediator();

 

ConcreteColleageA* c1 = new ConcreteColleageA(m);

ConcreteColleageB* c2 = new ConcreteColleageB(m);

 

m->IntroColleage(c1,c2);

 

c1->SetState(“old”);

c2->SetState(“old”);

c1->Action();

c2->Action();

 

c1->SetState(“new”);

c1->Action();

c2->Action();

 

c2->SetState(“old”);

c2->Action();

c1->Action();

 

return 0;

}

 

Mediator是一种很有用且很常用的模式,它通过将对象的通信封装到一个类中,将多对多的通信转化为一对多的通信,降低了系统的复杂性。

还解耦了系统,通过中介者,各个colleage就不必维护各自通信的对象和通信协议,降低了系统的耦合性,mediator和各个Colleage就可以相互独立地修改了。

 

中介者模式将控制集中,便宜于管理,也正符合OO设计中的每个类的职责单一的原则。

 

 

4 使用场景

中介者模式适合于多个对象之间紧密耦合的情况,在类图中出现了蜘蛛网状结构。这有利于把蜘蛛网结构梳理为星型结构,使原本复杂的关系变清晰。

 

中介者模式也叫调停者模式,一个对象要与N个对象交流时,就非常混乱。如加入一个调度中心,所有的类都和中心交流。

 

用途:

1. 调度中心

2. MVC模式中的Controller

3. 中介服务。

4. 用在多对多对象复杂关系中,简代成一对多关系

 

 

5 优缺点

优点:减少类之间的依赖,把原有的一对多依赖变成一对一依赖,降低耦合性。

 

缺点:中介者会很大,而且逻辑复杂,原本N个对象直接相互依赖关系转换成中介者和同事依赖关系,同事类越多,中介者越复杂。

 

 

6 总结

中介者模式是用途很广的设计模式之一。在MCV模式中,观察者模式相当于是Model和View, 而中介者模式相当于是Controller控制器。

设计模式C++实现(13)——中介者模式 软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。中介者模式。 阅读详情

相关推荐

突破编程_C++_设计模式(中介者模式)

C++ 设计模式:中介者模式

突破编程 1746

C++ 设计模式——中介者模式

中介者模式(Mediator Pattern)是一种行为型设计模式,它允许对象间的通信被封装到一个中介者对象中。该模式的主要目的是减少多个对象和类之间的通信复杂性,通过创建一个集中的控制点来管理相互间的依赖关系。这种模式特别适用于大型系统中,可以帮助减少组件之间的直接交互,从而使其更易于维护和扩展。

慢慢记录,慢慢更新。 3250

C++设计模式——Mediator中介者模式

中介者模式是一种行为型设计模式。它通过一个中介者对象将多个对象之间的交互关系进行封装,使得对象之间的交互需要通过中介者对象来完成。该设计模式的结构很容易理解,以中介者为中心。中介者模式的设计思想侧重于在对象之间增加一个用来调度的中介。有了中介者模式,各个对象可以专注于各自的业务处理逻辑,而不需要关心通信的具体实现细节。航空管制系统:航空管制系统作为中介者,协调飞机、航空公司和机场的通信和协作。交易系统:在金融领域,交易系统将银行、金融机构、客户等各个参与者进行协调,确保资金的安全快速转移。

程序员与背包客_CoderZ 2031

C++ 设计模式之 中介者模式

第一行包括一个整数N,表示用户的数量(1

K1_uestc的博客 2257

23种设计模式-中介者(Mediator)设计模式

软考中级-软件设计师 中介者设计模式

片言可决讼,半纸能缚龙 1863

C++设计模式17:中介者模式

中介者模式是一种行为型设计模式,它的目的是通过将对象之间的通信转移给中介者对象来减少对象之间的直接耦合,从而提高系统的可维护性和可扩展性。在中介者模式中,多个对象之间的通信不再直接进行,而是通过中介者对象进行协调。中介者对象通常包含一个接口,用于与其他对象进行通信,并能够根据接收到的消息来进行相应的处理。当对象需要与其他对象进行通信时,它们不再直接向目标对象发送消息,而是将消息发送给中介者对象,由中介者对象来协调处理。

琅嬛福地 999

【Mediator模式】C++设计模式——中介者模式

C++中介者模式,Mediator模式,本文以问题引入与联系现实讲解中介者模式,同时通过代码展示了中介者模式

不负AC不负卿的博客 982

C++ 中介者模式

中介者模式(Mediator Pattern)用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

青春不老,奋斗不止! 5589

C++设计模式(21)——中介者模式

C++ 中介者模式

伍粟的博客 1208

ArcGIS基础:CAD数据转换为GIS数据(符号化显示、数据转换、线转面、空间连接)

1、符号化显示: CAD数据加载进来有很多列表,包含了点【point】、线【polyline】、面【polygon】、标注数据【Annotation】等数据,本次实验我们需要用到的是面数据,也就是.dwgPolygong格式的数据。如下图所示: 把数据加载进来,然后在2处打开属性表,查看CAD数据的属性表,打开后可以发现【layer】图层表示就是地块的用地性质,它就是符号化显示的依据。 我们在数据上右键【属性】,打开图层属性,找到【符号系统】,选择类别中的【唯一值】,然后在【值字段】下拉选择【layer】,

yuanYW7556的博客 2万+

基于单片机负载控制的无人机电气设备监测系统设计

为深入分析无人机电气设备的电子负载性能,实现对传输电子量的合理性监管与控制,设计基于单片机负载控制的无人机电气设备监测系统;利用电气信号发生电路,构建负载网络控制器与以太网模块运行所需的电气设备负载环境,借助PCB监控板建立PLC扩展负载模块与核心监控主机之间的物理连接关系,实现无人机电气设备监测系统的硬件执行环境搭建;在此基础上,通过STM32型单片机移植协议,确定无人机电气设备通信主机的现有组态形式,联合已设定的监控任务有线级条件,实现监测系统的软件执行环境搭建,完成基于单片机负载控制的无人机电气设备监

weixin_45905610的博客 1300

【c++设计模式19】行为模式4:中介者模式(Mediator Pattern)

中介者模式定义了一个中介者接口(Mediator),该接口包含了协调多个对象之间的方法。具体中介者类(Concrete Mediator)实现了中介者接口,并且对多个相关对象之间的交互进行控制。每个相关对象(Colleague)都包含一个指向中介者对象的引用,并且在需要与其他相关对象通信时,通过中介者对象来进行交互。

junxuezheng的博客 1628

在AutoDL的A100云服务器上,用Docker搞定Sapien+RobotWin环境(附完整conda list)

本文详细介绍了在AutoDL的A100云服务器上使用Docker构建Sapien+RobotWin环境的完整指南。通过配置Vulkan渲染管线、精确复现Conda环境以及解决常见问题,帮助研究人员高效搭建稳定的机器人仿真开发环境,特别适合需要高性能GPU加速的复杂仿真任务。

weixin_30689307的博客 431

C++设计模式行为模式———中介者模式

中介者将对象之间复杂的沟通和控制方式集中起来处理,将以往对象之间复杂的多对多关系转化为简单的一对多关系。让系统有更好的灵活性和可扩展性。中介者模式将同事对象进行解耦,同事对象之间不再是一种紧耦合关系,它们仅知道中介者,从而减少相互连接的数目。每个同事类对象都可以独立地改变而不会影响到其他同事类对象,更符合开闭原则,进一步增加了对象的复用性。

无敌岩雀的博客 1819

从零开始的计网学习——物理层

计算机网络对于IT人不论是就业还是升学都是核心的一门课程,一起从零开始,学习计算机网络!

Nimrod__的博客 2万+

2025ICPC南昌邀请赛题解

2025ICPC南昌邀请赛由XDU和WHU联合出题的ICPC南昌邀请赛,榜单显示8题金、6题银、5题铜。

weixin_50089904的博客 1958

中介者模式【行为模式C++】

中介者模式是一种行为设计模式, 能让你减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互, 迫使它们通过一个中介者对象进行合作。亦称: 调解人、控制器、Intermediary、Controller、Mediator。

weixin_39775340的博客 824

基于大模型与知识图谱的对话引导意图澄清系统技术解析

本文提出了一种基于知识图谱与大语言模型的意图澄清系统,旨在解决传统RAG模型在跨文档推理和主动澄清方面的不足。系统通过知识图谱驱动的多跳推理机制和链式思维引导的对话流程,实现了动态信息补全和意图澄清。核心创新包括:1)知识图谱构建与节点选择算法;2)标签探索策略与原子事实提取方法;3)主动澄清引擎的工作流程。实验表明,该系统能有效提升复杂查询的准确率,在医疗、金融等领域实现精准交互。关键代码展示了节点选择、标签匹配和事实提取等核心组件的实现细节。

414

【第18节】C++设计模式(行为模式)-Mediator(中介者)模式

Mediator 模式的核心思想是通过一个中介者对象来封装一组对象之间的交互。这样,对象之间不再直接通信,而是通过中介者进行间接通信。(1)Mediator(中介者):定义一个接口用于与各 Colleague 对象通信。实现 Mediator 接口,协调各 Colleague 对象之间的交互。每个 Colleague 对象都知道它的 Mediator 对象,并通过 Mediator 与其他 Colleague 对象通信。

攻城狮7号的博客 1202

MSBlock赋能C2f模块,让目标检测在轻量化与精度间双向突破

在文件夹下新建,将上述MSBlock和C2f_MS类的代码写入其中。这一步是为了让YOLOv8的代码架构能识别我们的自定义模块。

LXY_LOVE36的博客 143

ESP32 DW1000 UWB 室内定位系统

详细介绍ESP32 DW1000 UWB 室内定位系统的设计演示demo。

DT程序员的博客 1662

C++设计模式-中介者模式

目录 基本概念 代码与实例 基本概念 中介者模式(Mediator)用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的相互作用,从而使其耦合松散,而且可以独立的改变他们之间的关系。 下面是UML图此图来源于大话设计模式 代码与实例 程序运行截图如下: 源码如下: Head.h #ifndef HEAD_H #define HEAD...

IT1995的博客 5316

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Qt C++设计模式->中介者模式

中介者模式通过引入一个中介者对象,将对象之间的直接交互转换为通过中介者来进行,从而降低了对象之间的耦合度。它适用于对象之间交互复杂且紧密耦合的场景,通过集中控制交互,提升了系统的可维护性和灵活性。

m0_46494667的博客 1723

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【C++】中介者模式

中介者模式(Mediator Pattern)是一种【行为型】设计模式,它通过一个中介对象来封装一系列对象之间的交互,使各对象不需要显式地相互引用,从而降低耦合度,并可以独立地改变它们之间的交互。这种模式将多对多的交互转化为一对多的交互,使系统更易于维护和扩展。

AAADiao的博客 1047

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C++设计模式——中介者模式(Mediator Pattern)

C++设计模式——中介者模式(Mediator Pattern) 微信公众号:幼儿园的学霸 目录 文章目录C++设计模式——中介者模式(Mediator Pattern)目录引言定义代码示例总结参考资料 引言 假设现在科技发达之后,家里所有设备都是智能化的,而小明在家洗澡的时候有个习惯就是喜欢听歌,而且洗澡时候还要把窗帘拉上。因此就有这种情形,小明要拉窗帘可能就是要洗澡,当然也要听歌,因此我们希望小明家的洗浴设备,音响设备和窗帘设备都能协同合作,不管操作哪种设备,其他两种设备都有一定响应,以此写出程序。

leonardohaig的博客 1891

设计模式之中介者模式

优点1.简化对象交互:中介者模式通过引入中介者对象,将原本多个对象之间的复杂交互关系转化为中介者与对象之间的一对多交互,从而简化了对象之间的交互关系。这使得原本网状结构的交互关系变为星型结构,使得代码更易于理解和维护。2.降低耦合度:通过中介者模式,对象之间的直接依赖关系被转化为对中介者的依赖,从而降低了对象之间的耦合度。这使得对象更易于独立地改变和复用,符合面向对象设计的“开闭原则”。3.集中控制:中介者模式将多个对象之间的交互行为集中到一个中介者对象中,使得这些行为的控制和管理更加集中和方便。

红军不怕远征难,万水千山只等闲 1440
上一篇: strlen函数实现(c语言)
下一篇: strstr函数实现(C语言)
second60
博客等级 码龄9年 155粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值