设计模式——中介者

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

MEDIATOR 中介者

 参考《设计模式——可复用面向对象软件的基础》和《研磨设计模式》的读书笔记。

1、 意图

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

2、 适用性

  • 一组对象以定义好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。
  • 一个对象引用其他很对对象并且直接与这些对象通信,导致难以复用该对象。
  • 想制定一个分布在多个类中的行为,而又不想生成太多的子类。

3、 结构


4、 参与者

Mediatord(中介者)

                            ——中介者定义一个接口用于与各同事(Colleague)对象通信。

ConcreteMediator(具体中介者)

                            ——了解中介者通过协调各同事对象实现协作行为。

                           ——了解并维护它的各个同事。

ColleagueClass(同事类,包括其子类)

                           ——每一个同事类都知道它的中介者对象。

                           ——每一个同事类对象在需与其他同事通信的时候,与它的中介者通信。

5、 协作

同事向一个中介者对象发送和接收请求。中介者在各同事间适当地转发请求以实现协作行为。

6、 效果

1)  减少了子类生成;Mediator将原本分布于多个对象间的行为集中在一起。改变这些行为只需要生成Mediator的子类即可。这样各个Colleague类可被重用。

2)  它将各Colleague解耦;Mediator有利于各Colleague间的松耦合。你可以独立地改变和复用Colleague类和Mediator类。

3)  它简化了对象协议;用Mediator和各Colleague间的一对多的交互来代替多对多的交互。一对多的关系更易于理解、维护和扩展。

4)  它对对象如何协作进行了抽象;将中介作为一个独立的概念并将其封装在一个对象中,使你将注意力从对象各自本身的行为转移到它们之间的交互上来。这有助于弄清楚一个系统中的对象是如何交互的。

5)  它使控制集中化;中介者模式将交互的复杂性变为中介者的复杂性。因为中介者封装了协议,它可能变得比任一个Colleague都复杂。这可能使得中介者自身成为一个难以维护的庞然大物。

7、 实现

1)   忽略抽象的Mediator类;当各Colleague仅与一个Mediator一起工作时,没有必要定义一个抽象的Mediator类。Mediator类提供的抽象耦合已经使各Colleague可与不同的Mediator子类一起工作,反之亦然。

2)  Colleague——Mediator通信;当一个感兴趣的事件发生时,Colleague必须与其Mediator通信。一种实现方法是Observer模式,将Mediator实现为一个Observer,各Colleague作为Subset,一旦其状态改变就发送通知给Mediator;一种方法是在Mediator中定义一个特殊的通知接口,各Colleague在通信时直接调用该接口。

8、 代码示例

Mediatord

package com.examples.pattern.mediator;

/**
 * 中介者,定义各个同事对象通信的接口
 */
public interface Mediator {

	/**
	 * 同事对象自身改变的时候来通知中介者的方法 让中介者去负责相应的与其他同事对象的交互
	 * 
	 * @param colleague
	 *            同事对象自身,好让中介者对象通过对象实例去获得同事对象的状态
	 */
	public void changed(Colleague colleague);
}

ConcreteMediator

package com.examples.pattern.mediator;

/**
 * 具体的中介者实现
 */
public class ConcreteMediator implements Mediator {

	/**
	 * 持有并维护同事A
	 */
	private ConcreteColleagueA colleagueA;
	/**
	 * 持有并维护同事B
	 */
	private ConcreteColleagueB colleagueB;

	/**
	 * 设置中介者需要了解并维护的同事A对象
	 * @param colleagueA
	 */
	public void setColleagueA(ConcreteColleagueA colleagueA) {
		this.colleagueA = colleagueA;
	}

	/**
	 * 设置中介者需要了解并维护的同事B对象
	 * @param colleagueB
	 */
	public void setColleagueB(ConcreteColleagueB colleagueB) {
		this.colleagueB = colleagueB;
	}

	@Override
	public void changed(Colleague colleague) {
		System.out.println(colleague);
	}

}
 Colleague Class

package com.examples.pattern.mediator;

/**   
* 同事类的抽象父类       
*/
public abstract class Colleague {

	/**
	 * 持有中介者对象,每一个同事类都知道它的中介者对象
	 */
	private Mediator mediator;

	/**
	 * 构造者方法,传入中介者对象
	 * @param mediator
	 */
	public Colleague(Mediator mediator) {
		this.mediator = mediator;
	}

	/**
	 * 获得当前同事类对应的中介者对象
	 * @return
	 */
	public Mediator getMediator() {
		return mediator;
	}
	
	
	
}
package com.examples.pattern.mediator;

/**   
*  具体的同事类A      
*/
public class ConcreteColleagueA extends Colleague {

	public ConcreteColleagueA(Mediator mediator) {
		super(mediator);
	}
	
	public void someOperation(){
		//在需要跟其他同事通信的时候,通知中介者对象
		getMediator().changed(this);
	}

}
package com.examples.pattern.mediator;

public class ConcreteColleagueB extends Colleague {

	public ConcreteColleagueB(Mediator mediator) {
		super(mediator);
	}
	
	public void someOperation(){
		//在需要跟其他同事通信的时候,通知中介者对象
		getMediator().changed(this);
	}

}
Client

package com.examples.pattern.mediator;

public class Client {

	public static void main(String[] args) {
		ConcreteMediator mediator = new ConcreteMediator();
		ConcreteColleagueA ca = new ConcreteColleagueA(mediator);
		ConcreteColleagueB cb = new ConcreteColleagueB(mediator);
		
		mediator.setColleagueA(ca);
		mediator.setColleagueB(cb);
		
		ca.someOperation();
		cb.someOperation();
		
		
	}

}
9、 相关模式

Façade与中介者的不同之处在于它是对一个对象子系统进行抽象,从而提供了一个更方便的接口。它的协议是单向的,即Façade对象对这个子系统类提出请求,但反之则不行。相反,Mediator提供了各Colleague对象不支持或不能支持的协作行为,而且协议是多向的。

Colleague可使用Observer模式与Mediator通信。

10、 广义中介者

在我们的通常使用中,经常会简化中介者模式,来使开发变得简单,有如下变化:

  • 通常会去掉同事对象的父类,这样可以让任意的对象,只要需要相互交互,就可以成为同事。
  • 通常不定义Mediator接口,把具体的中介者对象实现成单例。
  •  同事对象不再持有中介者,而是在需要的时候直接获取中介者对象并调用;中介者也不再持有同事对象,而是在具体处理方法里面去创建,或者获取,或者从参数传入需要的同事对象。


设计模式 - 中介者模式 立即下载

相关推荐

【GNSS/Linux】BKG Ntrip Client (BNC) 的编译与安装

【GNSS/Linux】BKG Ntrip Client (BNC) 的编译与安装 1. BNC软件 1.1 软件介绍 The BKG Ntrip Client (BNC) is an Open Source multi-stream client program designed for a variety of real-time GNSS applications. It was primarily designed for receiving data streams from any Ntrip

小马甲的新马甲 7803

简说设计模式——中介者模式

一、什么是中介者模式   中介这个词并不陌生,就是房屋中介的那个“中介”,就是中间人的意思。比如MVC模式,C(Controller控制器)是M(Model模型)和V(View视图)的中介者,在前后端交互时起到了中间人的作用。   中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。UM...

weixin_34240520的博客 470

PTC-6-2004汽轮机性能计算源代码,pycharm-包括试验计算、一类修正、二类修正-以CC350-16.7/0.98/0.5/538/538型汽轮机为例,5万7千字,过程不易欢迎打赏

汽轮机性能计算完整源代码-简化试验-包括试验计算一类修正计算和二类修正计算目录图 1 工程结构。

weixin_43441028的博客 992

设计模式之中介者模式详解

一般来说,类之间的关系是比较复杂的,多个类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下左图中,有六个类对象,假如对象1发生变化,那么将会有4个对象受到影响。如果对象2发生变化,那么将会有5个对象受到影响。也就是说,类之间直接关联的设计是不好的。...

glass__sky的博客 6716

南大计算机2024保研笔试:编译原理等5门专业课考点分布与408复习避坑指南

本文详细解析了南京大学计算机2024保研笔试的考点分布与复习策略,重点突出编译原理(占比28%-32%)和离散数学的特色考核。提供跨课程复习方法、真题题型分析及高效备考建议,帮助考生突破传统408框架,应对南大独特的命题风格。

weixin_29304985的博客 343

电源完整性之Cadence Sigrity Power SI_AC阻抗仿真

之前和大家分享过电源完整性之仿真设计原理链接: [link](https://blog.youkuaiyun.com/weixin_41808082/article/details/117065140?spm=1001.2014.3001.5501).今天接着上一篇文章总结一下电源AC阻抗的的仿真操作流程及一些simulation中的设置参数,用到的时候Cadence Sigrity 中的Power SI组件,下面开始享受仿真的快乐吧: 1.仿真模式选择与文件导入 选择Cadence Sigrity下的Power SI

刘小同学的博客 1万+

23种设计模式之中介者模式

中介者模式在 Java 生态中的典型应用包括: Java Message Service (JMS):消息队列作为中介者协调生产者与消费者。 Spring MVC 的 DispatcherServlet:协调控制器、视图解析器等组件。 事件总线框架:如 Google Guava 的 EventBus。 掌握该模式能有效解决复杂对象交互问题,提升代码的可读性和扩展性。

分享技术应用、实践场景等,评论区开放技术难题讨论,共同成长进步。 721

级联H桥构网型储能SVG系统设计与VSG控制策略研究

随着新能源渗透率不断提高,电力系统惯量和阻尼水平持续下降,传统跟网型控制策略在弱电网条件下的稳定性面临严峻挑战。构网型控制以电压源方式运行,能够为系统提供惯量和频率支撑,成为当前研究热点。本文针对10kV/10Mvar级联H桥构网型储能静止无功发生器(SVG),采用星形连接拓扑结构,设计了基于虚拟同步发电机(VSG)的构网型控制策略。文章从主电路拓扑设计、数学建模、VSG控制策略设计、调制策略、直流电压平衡控制、系统参数设计、仿真建模和硬件实现等八个方面展开系统论述,给出了完整的Simulink仿真模型~~

huanghm88的专栏 349

【设计模式】——中介者模式(Mediator Pattern)

中介者模式(Mediator Pattern)是一种对象行为型模式,主要用于降低系统中对象之间的耦合度,通过引入一个中介者来封装对象之间的交互,使得对象之间的交互更加灵活和可扩展。本文将详细介绍中介者模式在C++中的实现方式及其应用场景。

J^T的博客 902

【零基础入门unity游戏开发——unity通用篇12】导入导出unity资源包、设置编程工具、创建脚本(组件)规则、MonoBehaviour基类介绍、脚本模板(基于unity6开发介绍)

导入导出unity资源包、设置编程工具、创建脚本(组件)规则、MonoBehaviour基类介绍、脚本模板(基于unity6开发介绍)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 760

NX二次开发新建组件

NXOpen新建组件

qq_39541524的博客 329

设计模式-中介者模式

中介者模式是一种行为型设计模式,它用于减少对象之间互相通信的复杂性。中介者模式通过创建一个中介者对象,将对象之间的通信集中交给该对象来处理,而不是直接相互交流,就是用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。是符合迪米特原则的典型应用。迪米特原则:减少对象之间的依赖,即一个对象应当对其它对象有尽可能少的了解二、优缺点减少对象之间的耦合度,使其变得简单易维护。提高代码的重用性和可扩展性,增强了系统的灵活性和可维护性。

aumiel的博客 1963

AutosarMCAL开发——基于EB Wdg驱动

Autosar标准文件中提及的API共有5个,接口名传入参数说明返回参数函数功能ConfigPtr:Wdg配置指针,参数来自于EB生成代码voidWdg初始化ConfigPtr:Wdg配置指针Wdg初始化检查Wdg切换模式,需开启对应配置timeout:设置定时触发器计数(单位ms)void喂狗并重新设定计数值Wdg版本信息本文为博主个人学习总结记录,如有不正,欢迎指正。

qq_45583706的博客 2426

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

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

慢慢记录,慢慢更新。 3250

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

设计模式之中介者

(Mediator) 是一种行为设计模式, 能让你减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互, 迫使它们通过一个中介者对象进行合作。适用场景代码如下:问题:实现一个机场的起飞管理系统,如果由驾驶员自己管理,会导致混乱,因此需要一个中介者来管理。解决方案:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使耦合松散,而且可以独立地改变他们之间的交互。中介者模式可帮助你减少各种UI组件之间的互相依赖关系。

qq_74811378的博客 1025

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

设计模式——中介者设计模式(行为型)

文章详细介绍了中介者设计模式,这是一种行为型设计模式,通过中介者对象封装多个对象间的交互,降低系统耦合度。文中阐述了其核心角色、优缺点、适用场景,并通过类图、时序图、实现方式、实战示例等多方面进行讲解,还探讨了与其他设计模式的组合使用,帮助读者全面理解该模式。

庄小焱 1887

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

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

Hanson的博客 1337

中介者设计模式(Mediator Design Pattern)[论点:概念、组成角色、相关图示、示例代码、适用场景]

中介者设计模式是一种行为型设计模式,它通过引入一个中介对象来封装一组对象之间的交互,使得对象之间不需要显式地相互引用,从而降低它们之间的耦合。通过将对象间的通信封装到中介者对象中,可以更容易地对这些对象的交互进行维护和修改。

龙飞的博客 1041

中介者设计模式

中介者设计模式(Mediator)是一种行为型设计模式。该模式引入中介对象来封装一系列的对象交互,并使这一系列的对象之间原本需要相互调用的依赖关系,全部转成对中介对象的单独依赖,即将多个对象的依赖关系由网状模型的转变成星状模型,从而使多个对象之间松耦合。

Keiissland的博客 426

设计模式之中介者模式

中介者模式是一种行为型设计模式,它定义了一个中介对象,用于封装一组对象之间的交互。通过中介者,多个对象不再相互引用,而是通过中介者进行通信,从而达到降低耦合的目的。中介者模式的核心思想是将多个对象之间的复杂通信逻辑集中到一个中介者对象中,避免了对象之间的直接依赖关系,使对象的关系结构变得简单且可控。中介者设计模式通过引入一个中介者对象来简化对象之间的交互,降低了对象之间的耦合度。在复杂的系统中,它有效地减少了对象之间的依赖,使系统的扩展和维护更加容易。

道可道非常道 984

设计模式---中介者模式(DesignPattern_Mediator)

摘录自:设计模式与游戏完美开发 十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity Technologies——Kelvin Lo、信仁软件设计...

weixin_34405332的博客 109

学习设计模式《九》——中介者模式

 中介者模式的本质是【封装对象之间的交互】;

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 1387

JAVA设计模式(十四)设计模式之中介者设计模式

前言 本章讲解设计模式中介者设计模式的相关知识 方法 1.概念 在Java的世界中,类与类之间难免有些相互的调用,一旦类之间的关系较为复杂,每个类都持有对方对象的引用,那么管理起来将十分的困难!为了解决这个问题,我们使用中介者设计模式来进行编程,使得有关系的双方可以通过中介进行联系,实现解耦。 现实生活中的中介者模式屡见不鲜,比如说租房子吧,这个博主印象比较深刻! 2.中介...

jwang的博客 228
上一篇: 设计模式——外观模式
下一篇: 设计模式——代理模式
HingKwan
博客等级 码龄17年 51粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值