【设计模式】—-(17)中介者模式(行为型)

Hi3516CV610开发板实战:从零搭建智能视觉监控系统 本文详细介绍了从零开始基于Hi3516CV610开发板搭建智能视觉监控系统的完整实战流程。涵盖硬件连接、系统配置、摄像头集成、网络设置、固件烧录到视频处理与智能分析功能开发,提供了丰富的实践经验和调试技巧,帮助开发者快速掌握嵌入式视觉系统开发。 阅读详情

中介者模式:

一、概念:

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

     通过定义我们可以看出中介者主要是通过中介对象来封装对象之间的关系,使之各个对象在不需要知道其他对象的具体信息情况下通过中介者对象来与之通信。同时通过引用中介者对象来减少系统对象之间关系,提高了对象的可复用和系统的可扩展性。

     但是就是因为中介者对象封装了对象之间的关联关系,导致中介者对象变得比较庞大,所承担的责任也比较多。它需要知道每个对象和他们之间的交互细节,如果它出问题,将会导致整个系统都会出问题。所以它比较容易应用也很容易误用。故当系统中出现了“多对多”交互复杂的关系群时,千万别急着使用中介者模式,你首先需要做的就是反思你的系统在设计上是不是合理。

包括的几个角色:

 Mediator: 抽象中介者。定义了同事对象到中介者对象之间的接口。

        ConcreteMediator: 具体中介者。实现抽象中介者的方法,它需要知道所有的具体同事类,同时需要从具体的同事类那里接收信息,并且向具体的同事类发送信息。

        Colleague: 抽象同事类。

        ConcreteColleague: 具体同事类。每个具体同事类都只需要知道自己的行为即可,但是他们都需要认识中介者。

在中介者模式中中介者对象处于核心地位,因为它定义了整个系统中所有具体同事类之间的关系。在整个系统中它主要承担两个方面的责任。

      1、 结构上起到中转作用。通过中介者对象对关系的封装,使得具体的同事类不再需要显示的引用其他对象,它只需要通过中介者就可以完成与其他同事类之间的通信。

      2、 行为上起到协作作用。中介者对同事类之间的关系进行封装,同事类在不需要知道其他对象的情况下通过中介者与其他对象完成通信。在这个过程中同事类是不需要指明中介者该如何做,中介者可以根据自身的逻辑来进行协调,对同事的请求进一步处理,将同事成员之间的关系行为进行分离和封装。

      同时由于中介者对对象的关系进行了封装,使得各个同事类之间的耦合减少了,使得他们可以独立改变和复用。


二、UML


三、代码

下面举个同事之间的例子加以说明

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

如果引入中介者模式,那么同事类之间的关系将变为星型结构,任何一个类的变动,只会影响的类本身,以及中介者,这样就减小了系统的耦合。一个好的设计,必定不会把所有的对象关系处理逻辑封装在本类中,而是使用一个专门的类来管理那些不属于自己的行为。

我们使用一个例子来说明一下什么是同事类:有两个类A和B,类中各有一个数字,并且要保证类B中的数字永远是类A中数字的100倍。也就是说,当修改类A的数时,将这个数字乘以100赋给类B,而修改类B时,要将数除以100赋给类A。类A类B互相影响,就称为同事类。代码如下:

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. abstract class AbstractColleague {    
  2.     protected int number;    
  3.     
  4.     public int getNumber() {    
  5.         return number;    
  6.     }    
  7.     
  8.     public void setNumber(int number){    
  9.         this.number = number;    
  10.     }    
  11.     //抽象方法,修改数字时同时修改关联对象    
  12.     public abstract void setNumber(int number, AbstractColleague coll);    
  13. }    
[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. class ColleagueA extends AbstractColleague{    
  2.     public void setNumber(int number, AbstractColleague coll) {    
  3.         this.number = number;    
  4.         coll.setNumber(number*100);    
  5.     }    
  6. }    
[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. class ColleagueB extends AbstractColleague{    
  2.         
  3.     public void setNumber(int number, AbstractColleague coll) {    
  4.         this.number = number;    
  5.         coll.setNumber(number/100);    
  6.     }    
  7. }   
[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. public class Client {    
  2.     public static void main(String[] args){    
  3.     
  4.         AbstractColleague collA = new ColleagueA();    
  5.         AbstractColleague collB = new ColleagueB();    
  6.             
  7.         System.out.println("==========设置A影响B==========");    
  8.         collA.setNumber(1288, collB);    
  9.         System.out.println("collA的number值:"+collA.getNumber());    
  10.         System.out.println("collB的number值:"+collB.getNumber());    
  11.     
  12.         System.out.println("==========设置B影响A==========");    
  13.         collB.setNumber(87635, collA);    
  14.         System.out.println("collB的number值:"+collB.getNumber());    
  15.         System.out.println("collA的number值:"+collA.getNumber());    
  16.     }    
  17. }    

上面的代码中,类A类B通过直接的关联发生关系,假如我们要使用中介者模式,类A类B之间则不可以直接关联,他们之间必须要通过一个中介者来达到关联的目的。

同事类

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. abstract class AbstractColleague {    
  2.     protected int number;    
  3.     
  4.     public int getNumber() {    
  5.         return number;    
  6.     }    
  7.     
  8.     public void setNumber(int number){    
  9.         this.number = number;    
  10.     }    
  11.     //注意这里的参数不再是同事类,而是一个中介者    
  12.     public abstract void setNumber(int number, AbstractMediator am);    
  13. }   
  14. class ColleagueA extends AbstractColleague{    
  15.     
  16.     public void setNumber(int number, AbstractMediator am) {    
  17.         this.number = number;    
  18.         am.AaffectB();    
  19.     }    
  20. }    
  21.     
  22. class ColleagueB extends AbstractColleague{    
  23.     
  24.     @Override    
  25.     public void setNumber(int number, AbstractMediator am) {    
  26.         this.number = number;    
  27.         am.BaffectA();    
  28.     }    
  29. }    
抽象中介者类

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. abstract class AbstractMediator {    
  2.     protected AbstractColleague A;    
  3.     protected AbstractColleague B;    
  4.         
  5.     public AbstractMediator(AbstractColleague a, AbstractColleague b) {    
  6.         A = a;    
  7.         B = b;    
  8.     }    
  9.     
  10.     public abstract void AaffectB();    
  11.         
  12.     public abstract void BaffectA();    
  13.     
  14. }    
中介者类

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. class Mediator extends AbstractMediator {    
  2.     
  3.     public Mediator(AbstractColleague a, AbstractColleague b) {    
  4.         super(a, b);    
  5.     }    
  6.     
  7.     //处理A对B的影响    
  8.     public void AaffectB() {    
  9.         int number = A.getNumber();    
  10.         B.setNumber(number*100);    
  11.     }    
  12.     
  13.     //处理B对A的影响    
  14.     public void BaffectA() {    
  15.         int number = B.getNumber();    
  16.         A.setNumber(number/100);    
  17.     }    
  18. }    
客户端

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. public class Client {    
  2.     public static void main(String[] args){    
  3.         AbstractColleague collA = new ColleagueA();    
  4.         AbstractColleague collB = new ColleagueB();    
  5.             
  6.         AbstractMediator am = new Mediator(collA, collB);    
  7.             
  8.         System.out.println("==========通过设置A影响B==========");    
  9.         collA.setNumber(1000, am);    
  10.         System.out.println("collA的number值为:"+collA.getNumber());    
  11.         System.out.println("collB的number值为A的10倍:"+collB.getNumber());    
  12.     
  13.         System.out.println("==========通过设置B影响A==========");    
  14.         collB.setNumber(1000, am);    
  15.         System.out.println("collB的number值为:"+collB.getNumber());    
  16.         System.out.println("collA的number值为B的0.1倍:"+collA.getNumber());    
  17.             
  18.     }    
  19. }   

虽然代码比较长,但是还是比较容易理解的,其实就是把原来处理对象关系的代码重新封装到一个中介类中,通过这个中介类来处理对象间的关系。


四、优缺点

1、 简化了对象之间的关系,将系统的各个对象之间的相互关系进行封装,将各个同事类解耦,使系统成为松耦合系统。

2、 减少了子类的生成。

3、 可以减少各同事类的设计与实现。


适当地使用中介者模式可以避免同事类之间的过度耦合,使得各同事类之间可以相对独立地使用。

使用中介者模式可以将对象间一对多的关联转变为一对一的关联,使对象间的关系易于理解和维护。

使用中介者模式可以将对象的行为和协作进行抽象,能够比较灵活的处理对象间的相互作用。


缺点:

由于中介者对象封装了系统中对象之间的相互关系,导致其变得非常复杂,使得系统维护比较困难。


五、适用场景

1、 系统中对象之间存在比较复杂的引用关系,导致他们之间的依赖关系结构混乱而且难以复用该对象。

2、 想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。


六、总结

1、 在中介者模式中通过引用中介者对象,将系统中有关的对象所引用的其他对象数目减少到最少。它简化了系统的结构,将系统由负责的网状结构转变成简单的星形结构,中介者对象在这里起到中转和协调作用。

2、 中介者类是中介者模式的核心,它对整个系统进行控制和协调,简化了对象之间的交互,还可以对对象间的交互进行进一步的控制。

3、 通过使用中介者模式,具体的同事类可以独立变化,通过引用中介者可以简化同事类的设计和实现。

4、 就是由于中介者对象需要知道所有的具体同事类,封装具体同事类之间相互关系,导致中介者对象变得非常复杂,系统维护起来较为困难。

在面向对象编程中,一个类必然会与其他的类发生依赖关系,完全独立的类是没有意义的。

一个类同时依赖多个类的情况也相当普遍,既然存在这样的情况,说明,一对多的依赖关系有它的合理性,适当的使用中介者模式可以使原本凌乱的对象关系清晰,但是如果滥用,则可能会带来反的效果。

一般来说,只有对于那种同事类之间是网状结构的关系,才会考虑使用中介者模式。可以将网状结构变为星状结构,使同事类之间的关系变的清晰一些。

中介者模式是一种比较常用的模式,也是一种比较容易被滥用的模式。

对于大多数的情况,同事类之间的关系不会复杂到混乱不堪的网状结构,因此,大多数情况下,将对象间的依赖关系封装的同事类内部就可以的,没有必要非引入中介者模式。

滥用中介者模式,只会让事情变的更复杂。 


1、电路分析知识全解析:从基础到实践应用 本博客全面解析电路分析知识体系,涵盖从基础的电压、电流、电阻概念到复杂的交流电路、瞬态分析和高级应用如滤波器与变压器等内容。适合电子技术专业学生和技术爱好者学习,提供详细的知识结构、学习路径、实践示例以及丰富的学习资源,包括计算机模拟工具Multisim和PSpice的使用指导。通过理论与实践结合,帮助学习者掌握电路分析的核心技能,为电子工程和电力系统等相关领域打下坚实基础。 阅读详情

相关推荐

行列式详解:从定义到应用

本文系统介绍了行列式的核心概念和应用。首先从二阶、三阶行列式入手,逐步扩展到n阶行列式的定义,讲解了余子式和代数余子式的概念。其次,详细阐述了行列式的重要性质,包括转置不变性、行列交换变号等基本性质以及乘积性质等推论。在计算方法方面,介绍了按行展开法、化上三角矩阵法等实用技巧,并列举了特殊行列式的计算案例。最后重点讨论了行列式在克拉默法则、矩阵可逆性判断、几何体积计算及线性相关性判断等领域的应用。文章强调理解行列式的几何意义和灵活运用性质的重要性,并给出了学习建议和常见误区提示。行列式作为连接代数与几何的桥

aichitang2024的博客 3034

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

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

weixin_34240520的博客 470

零代码进行单细胞数据全流程分析教程

我开发的本地电脑无限使用无限分析作图的生信零代码一键分析电脑软件神器OmicsTools 软件在github上的zihaoxingstudy1/OmicsTools仓库 中,大家可以下载安装OmicsTools进行各种生信分析和可视化作图。

qq_40073899的博客 3625

设计模式之【中介者模式】,多对多关系降级为一对多关系的利器

中介者模式(Mediator Pattern)又称为调节者模式或调停者模式。用一个中介对象封装一系列的对象交互,中介者使各对象不需要显式的相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互,属于行为型模式。中介者模式的核心思想是,通过中介者解耦系统各层次对象的直接耦合,层次对象的对外依赖通信统统交由中介者转发。

秃了也弱了 4410

浅析MOS管导通过程及RC吸收电路设计要点

RC吸收电路 米勒电容 MOS导通过程

liangbo1999的博客 2万+

[亚信线上教学] AX58100: EtherCAT从站设备仿真功能设计教学

什么情况需要开启EtherCAT从站设备仿真功能呢? 一般来说, 当EtherCAT从站产品,不需要使用额外的微控制器介入,或使用不具备EtherCAT从站通讯协议栈的微控制器一同协作的情况下,就必须开启EtherCAT从站设备仿真功能,这样EtherCAT主站才能够正常设置从站设备的工作状态. 亚信AX58100 EtherCAT从站控制芯片的优点 AX58100 EtherCAT从站控制器, 集成2个百兆以太网Phis, 并支持一些额外的控制接口, 例如脉冲宽度调变, 增量, 霍尔编码器, .

allanchou1的专栏 7423

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

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

glass__sky的博客 6716

NXP S32K1 SPI驱动实战:从配置到DMA传输的完整流程解析

本文深入解析了NXP S32K1系列MCU的SPI驱动开发全流程。基于S32 Design Studio环境,详细阐述了从引脚配置、LPSPI模块初始化,到实现阻塞、中断及DMA三种传输模式的实战代码与配置要点。文章重点剖析了DMA传输的配置细节与性能优化,旨在帮助开发者构建高效、稳定的嵌入式SPI通信,并提供了SPI Flash驱动的综合案例。

blue42的博客 716

Java设计模式之行为型:中介者模式

中介者模式通过中介者对象来封装一系列的对象交互,将对象间复杂的关系网状结构变成结构简单的以中介者为核心的星形结构,对象间一对多的关联转变为一对一的关联,简化对象间的关系,便于理解;各个对象之间的关系被解耦,每个对象不再和它关联的对象直接发生相互作用,而是通过中介者对象来与关联的对象进行通讯,使得对象可以相对独立地使用,提高了对象的可复用和系统的可扩展性。在中介者模式中,中介者类处于核心地位,它封装了系统中所有对象类之间的关系,除了简化对象间的关系,还可以对对象间的交互进行进一步的控制。

张维鹏的博客 1万+

【用unity实现100个游戏之34】使用环状(车轮)碰撞器(Wheel Collider)从零实现一个汽车车辆物理控制系统,实现一个赛车游戏

本文介绍了在Unity中使用Wheel Collider组件实现3D车辆物理控制系统的详细步骤。主要内容包括: Wheel Collider参数详解:包括基础参数(质量、半径等)、悬挂弹簧系统(弹力、减震等)和摩擦力设置(前向/侧向摩擦曲线)。 准备工作流程: 导入赛车模型、赛道和树木素材 为车身添加Rigidbody和MeshCollider 创建四个Wheel Collider并调整参数(半径、悬挂距离等) 优化摩擦系数设置防止侧滑 实现车辆控制: 通过代码控制车轮前后移动和转向 提供底盘系统设置(四轮

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

具身智能(40):主流 VLA 模型π₀

摘要: π₀是首款专为机器人设计的VLA(视觉-语言-动作)端到端基础模型,通过双阶段训练实现“感知-决策-执行”闭环。其创新点包括:1)FlowMatching技术实现连续平滑动作控制(精度0.3°);2)结合VLM预训练与多机器人实操数据,零样本任务完成率达76.4%,远超同类模型;3)支持模糊指令理解与动态场景适应(如遮挡识别)。开源版本涵盖不同规模模型,适用于工业装配、服务机器人等场景,在延迟(213ms)和稳定性(92%自主恢复率)上显著领先OpenVLA等竞品。

码农17年的博客 510

设计模式之中介者模式

中介者模式是一种行为设计模式,用于通过集中化处理对象之间的交互来减少对象之间的直接耦合。中介者模式通过引入一个中介者对象,使各个对象不再直接相互引用,而是通过中介者对象进行通信。这有助于降低系统的复杂性,并使对象之间的关系更加灵活。

qq_57748030的博客 861

LPDDR6来了!到底比LPDDR5/5X强在哪?从速度到总线,技术细节一次说清!

LPDDR6不仅仅是速度快点、位宽大点那么简单,它是一次架构级的革新,从引脚、总线、时钟管理到Burst协议全部升级。🎯我们正在迈入一个“AI优先”的时代,内存架构也必须跟上。对于做芯片、做整机、做系统的你,理解LPDDR6的技术变化,提前规划测试方案,是现在就该启动的动作!

weixin_43199439的博客 1284

【C#设计模式】17.中介者模式(Mediator Pattern)【行为型】

1.1 动机(Motivate) 在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断地变化。 在这种情况下,我们可使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化。 1.2 意图(Intent) 定义了一个中介对象来封装一系列对象之间的交互关系。中介者使各个对象之间不需要显式地相互引用,从而使耦合性降低,而且可以独立地改变它们之间的交互行为。   .....

星Yeah 的博客 2335

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【Java教程】Day20-17 设计模式:行为型模式——中介者模式(Mediator Pattern)

中介者模式(Mediator Pattern)是一种行为型设计模式,旨在通过引入一个中介对象来封装多个对象的交互。它的主要作用是减少各个对象之间的直接引用,从而降低系统的耦合度,并使得对象间的交互变得更加灵活和简洁。

max202011161630的博客 903

假人有限元模型

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

17行为型设计模式——中介者模式

中介者(Mediator)定义一个接口用于与各个组件进行通信。具体中介者(ConcreteMediator)实现该接口,负责协调各个组件之间的交互。同事类(Colleague)各个参与交互的对象,通常是需要通过中介者来进行交互的对象。每个同事类对象持有对中介者对象的引用,通过中介者来发送和接收消息。中介者模式集中管理所有对象的交互行为,通过中介者减少对象之间的直接依赖,即不需要各个对象显式的去相互交互,而是由中介者去和各个对象直接交互,一定程度下降低耦合度,并使得系统的设计更加清晰、模块化。

qq_55610255的博客 1234

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

23种设计模式(17)_行为型_中介者模式(Mediator Pattern)

定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下图中,有六个同事类对象,假如对象1发生变化,那么将会有4个对象受到影响。如果对象2发生变化,那么将会有5个对象受到影响。也就是说,同事类之间直接关联的设计是不好的。

heyuchang666的专栏 836

【从零入门23种设计模式17】行为型之中介者模式

摘要:中介者模式是一种行为型设计模式,通过引入中介对象封装对象间交互,将网状依赖转为星型结构,降低耦合度。该模式包含抽象中介者(定义交互接口)、具体中介者(实现交互逻辑)、抽象同事类(组件规范)和具体同事类(业务实现)四个核心角色。典型应用场景包括微信群聊(消息转发)、微服务网关(服务协调)等。其优势在于解耦组件、集中管理交互逻辑,但需注意避免中介者类过度膨胀。与观察者模式相比,中介者模式更强调双向协调而非单向通知。在Spring框架、消息中间件等系统中广泛应用。

2401_87662859的博客 875

【设计模式(17)】行为型模式之中介者模式

个人学习笔记分享,当前能力有限,请勿贬低,菜鸟互学,大佬绕道 如有勘误,欢迎指出和讨论,本文后期也会进行修正和补充 前言 相信很多人都对更换手机号有所顾虑,或者体验过了这种麻烦——通知每个人自己手机号变更了,亲友朋友同事上司全都得通知一遍,万一漏了,就失联了,甚至还得确保他们收到且更换了通讯录中你的号码 那么,我们能不能将手机号存在一个中介处,我们只需要告知中介处我们的新手机号。当有人想找我们的时候,他们也只需要询问中介就行了。 比如公司、班级、家庭的通讯录,自己手机号或者地址修改后,也同步修改一下就.

路远不知归 343

17、设计模式(行为型)之中介者模式

作用 用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 何时使用 多个类相互耦合,形成了网状结构。 优点 降低了类的复杂度,将一对多转化成了一对一。 各个类之间的解耦。 符合迪米特原则。 开发常见场景 MVC模式(其中的C,控制器就是一个中介者,M和V都和它打交道)) 窗口游戏程序,窗口软件开发中窗口对象也...

为什么坚持,想一想当初 309

JAVA SCRIPT设计模式--行为型--设计模式之Mediator中介者模式(17)

CreateWidgets是创建一个对话框的窗口组件的抽象操作。不同的对话框会有不同的窗口组件间的依赖关系。大量的相互连接使得一个对象似乎不太可能在没有其他对象的支持下工作 —系统表现为一个不可分割的整体。而且 ,对系统的行为进行任何较大的改动都十分困难, 因为行为被分布在许多对象中。例如,FontDialogDirector可作为一个对话框中的窗口组件间的中介者。FontDialogDirector对象知道对话框中的各窗口组件,并协调它们之间的交互。在最坏的情况下,每一个对象都知道其他所有对象。

火柴盒 459

设计模式(17)-行为型-中介者模式(Mediator)

概述 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 适用性 1.一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。 2.一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。 3.想定制一个分布在多个类中的行为,而又不想生成太多的子类。

iihero@优快云 2006

设计模式笔记(17)---中介者模式(行为型)

Gof定义用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。动机在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。在这种情况下,我们可使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合

oec2003的学习专栏 909

CAD 2026安装全攻略:从环境准备到功能测试的完整指南

计算机辅助设计(CAD)软件是工程与设计领域的核心工具,其安装部署是软件生命周期管理的重要环节。CAD软件的安装原理涉及系统环境兼容性检查、组件依赖关系解析以及许可授权验证等多个技术层面。掌握规范的安装流程不仅能确保软件稳定运行,更能提升工作效率和数据安全性。对于像AutoCAD 2026这样的专业软件,其技术价值在于为二维绘图、三维建模及参数化设计提供强大的平台。在实际应用场景中,无论是机械设计、建筑设计还是学生学习,一套清晰可靠的安装指南都至关重要。本文围绕【系统兼容性】和【激活失败】等常见痛点,详细拆

weixin_34021089的博客 313

C#面向对象设计模式纵横谈 学习笔记17 Mediator 中介者模式(行为型模式)

意图       用一个中介对象来封装一系列对象的交互。中介者使得各对象不需要显式相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。Mediator模式解决了一个问题,多个类相互引用相互,相互影响,这时候类的关系模型是复杂的,一个类对象的变化会导致其他类对象的变化,这种场景有点连锁反应的意思。下面有一段代码class CutMenuItem    {  

Lawrence的专栏 1502
上一篇: 【设计模式】—-(16)观察者模式(行为型)
下一篇: 【Python】学习笔记——-1、什么是Python?
白衣染霜陈
博客等级 码龄22年 682粉丝 338原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值