Mediator 中介模式

Qt C++ mediator模式(中介者模式) mediator.h #pragma once #include class CMediator; class CCountry { public: virtual void setMediator(CMediator *mediator) = 0; virtual void sendMessage(const QString& message) = 0; 阅读详情

模式定义

 

使用一个中介对象来封装一系列对象之间的交互。中介者可以独立开这些对象之间的相互引用,使其耦合松散,并可以改变他们之间的交互。

使用方法

 

一系列的对象向中介注册,将他们之间的相互耦合关系交由中介统一管理。

使用范围

 

  • 对象之间相互引用且逻辑过于复杂的时候。
  • 当引入一个新的对象后导致其他已存在的对象需要重新改变相互之间的逻辑的时候。
  • 特别适合事件驱动类的程序中,例如界面动作。

举例说明

 

创捷一个应用程序,该程序具有Calculate计算的功能,同时,能Halt中断计算,或者直接停止计算。Calculate、Halt、Stop三种功能分别通过点击三个按钮来完成动作。当点击其中一个按钮时,该按钮被Disable,而其他可Enable。比如点击Calculate的时候,Calculate的按钮灰掉不可再点击,而Halt和Stop可以点击。

首先定义一个Command的接口,表示按钮要执行的动作。各个按钮将实现该接口的execute方法。

public interface Command {
    void execute();
}

接下来定义各个按钮:BtnCalculate、BtnHalt、BtnStop。注意到每个类都向Mediator注册并交由Mediator管理具体的动作。这三个类没有直接的相互引用,完全松耦合。

public class BtnCalculate extends JButton implements Command {
    Mediator med;
    BtnCalculate (ActionListener al, Mediator m) {
        super("Calculate");
        addActionListener(al);
        med = m;
        med.registerCalculate(this);
    }
    public void execute() {
       med.cal();
    }
}
---------
public class BtnHalt extends JButton implements Command {
    Mediator med;
    BtnHalt(ActionListener al, Mediator m) {
        super("Halt");
        addActionListener(al);
        med = m;
        med.registerHalt(this);
    }
    public void execute() {
       med.halt();
    }
}
---------
public class BtnStop extends JButton implements Command {
    Mediator med;
    BtnStop(ActionListener al, Mediator m) {
        super("Stop");
        addActionListener(al);
        med = m;
        med.registerStop(this);
    }
    public void execute() {
       med.stop();
    }
}

再看Mediator如何注册这三个类并管理他们直接的具体Command和相互之间的关系。注册registerXXXX引用了他们三个类的一个实例。并代理他们实现command方法。

public class Mediator {
    BtnCalculate btnCal;
    BtnHalt btnHalt;
    BtnStop btnStop;
    LblDisplay show;
    //....
    void registerCalculate(BtnCalculate c) {
    	btnCal = c;
    }
    void registerHalt(BtnHalt h) {
    	btnHalt = h;
    }
    void registerStop(BtnStop s) {
    	btnStop = s;
    }
    void registerDisplay(LblDisplay d) {
        show = d;
    }
    void cal() {
    	btnCal.setEnabled(false);
    	btnHalt.setEnabled(true);
    	btnStop.setEnabled(true);
       show.setText("Calculating...");
    }
    void halt() {
    	btnCal.setEnabled(true);
    	btnHalt.setEnabled(false);
    	btnStop.setEnabled(true);
       show.setText("Halted...");
    }
    void stop() {
    	btnCal.setEnabled(true);
    	btnHalt.setEnabled(true);
    	btnStop.setEnabled(false);
       show.setText("Stopped...");
    }
}

客户类:

public class MediatorClient extends JFrame implements ActionListener {
    Mediator med = new Mediator();
    MediatorClient() {
       JPanel p = new JPanel();
       p.add(new BtnCalculate(this,med));
       p.add(new BtnHalt(this,med));
       p.add(new BtnStop(this, med));
       getContentPane().add(new LblDisplay(med), "North");
       getContentPane().add(p, "South");
       setSize(400,200);
       setVisible(true);

    }
    public void actionPerformed(ActionEvent ae) {
        Command comd = (Command)ae.getSource();
        comd.execute();
    }
	public static void main(String[] args) {
	    new MediatorClient();
    }
}

运行结果:

下载示例

 

Windows上MSYS2的安装和使用 MSYS2这个工具我是越用越喜欢,很多东西放在Linux上如鱼得水但是放在Windows上就没那么好用,比如ffmpeg,opencv等直接引用就行了,这个工具真的很省事。接下来带你们看看它的妙用。1、好好研究确实妙用无穷。 阅读详情

相关推荐

WorkBench3.2 + VxWorks6.8安装教程

按照FTP连接主机和目标机,将整个VxWorks6.8的安装分为两个部分,一是在主机(win10系统,可以使用虚拟机或者实体机,推荐使用虚拟机)上安装workbench3.2,进行bootrom与VxWroks映像文件的生成,二是在虚拟机上安装VxWorks系统 19.10.10 首先很高兴文章能帮到大家,但由于本人已不做该方向良久,私信和评论的很多问题现在已经无法解答,如果大家有什么问题欢迎...

Alive的博客 3万+

【中介者模式(Mediator)】使用Java实现中介者模式

Java使用中介者模式减少Controller和Service耦合

weixin_43139800的博客 994

硬件原理图:从软件思维到硬件接口的嵌入式开发破局指南

本文为软件开发者提供了读懂硬件原理图的嵌入式开发破局指南。文章将硬件原理图类比为“硬件系统的架构图”,引导读者将软件API调用思维迁移到硬件接口理解上,详细解析了电阻、电容、二极管等常见元器件的“硬件API”功能与选型逻辑,并通过实战电路拆解,阐述了从原理图分析到驱动代码编写的完整思维链条,帮助开发者建立软硬件协同的系统级视角。

lg888的博客 496

java mediator_java—mediator中介模式

中介者模式是由GoF提出的23种软件设计模式的一种。Mediator模式是行为模式之一,Mediator模式定义:用一个中介者对象来封装一系列的对象交互。中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。适用性1)一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。2)一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对...

weixin_28851659的博客 225

VSCode+Typst零配置写作指南:5分钟搞定论文排版环境(含实时预览技巧)

本文介绍如何利用VSCode和Typst快速搭建零配置的论文排版环境,5分钟内实现高效写作与实时预览。Typst作为轻量级排版工具,结合LaTeX的精度与现代化语法,显著提升学术写作效率,特别适合需要频繁调整格式的研究人员。

weixin_30642561的博客 112

海波龙(Oracle Hyperion)单点登陆问题记录

Oracle海波龙套件已经多年未更新,按Oracle官方文档实施单点登陆启用之后,SmartView工具通过专用链接方式无法登陆系统。 在抓包逆向分析之后 定位到HspSmartViewServlet类在执行以下代码时获得的ssotoken无效导致,在某大厂工作的时候曾通过在filter中截获请求的方式植入Attribute,保留账号密码并在单点程序中处理实现登陆。 但在完美世界的环境中...

cainiaoEzu的专栏 1971

设计模式:Mediator--中介模式

中介模式 中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改。如果使用中介者模式,只需关心和Mediator类的关系,具体类类之间的关系及调度交给Mediator就行,这有点像spring容器的作用。先看看图: User类统一接口,User1和User2分别是不同的对象,二者之间有关联,如果不采用...

yubin1285570923的博客 277

YOLO26涨点改进 | 检测头Head创新改进篇 | 利用DynamicConv高效动态卷积改进YOLO26检测头,DyHead通过增强检测头操作,轻量化改进、提高模型目标检测的精度

YOLO26作为新一代轻量化目标检测模型的代表,凭借精简的Backbone架构、高效的特征融合 Neck 设计,在实时检测场景(如嵌入式设备、边缘计算)中展现出优异的性能,成为工业落地与科研入门的优选模型。但在实际应用中,YOLO26原生检测头仍存在核心瓶颈:采用固定参数卷积核,无法根据输入特征的目标尺度、纹理差异动态调整卷积权重,导致多尺度目标适配不足、复杂背景下特征利用率低,且传统改进方案往往难以平衡“精度提升”与“轻量化”,要么精度提升有限,要么大幅增加参数量、拖累推理速度。

qq_36130719的博客 375

Mediator 中介者模式

public abstract class Element { protected Mediator mediator; public Element( Mediator mediator ) { this.mediator = mediator; this.mediat...

weixin_30690833的博客 75

手把手教你学Simulink--基础电机控制场景实例:基于Simulink的无刷直流电机六步换相仿真

摘要:本文详细介绍了基于Simulink的无刷直流电机(BLDC)六步换相仿真方法。文章首先阐述了BLDC六步换相控制的原理,包括霍尔传感器定位、六步换相逻辑和方波电流驱动三大支柱。然后通过电动工具(角磨机)应用场景,展示了如何在Simulink中搭建完整的六步换相系统:从主电路构建、霍尔信号生成、Stateflow换相逻辑实现到开环电压控制。仿真结果显示该系统具有低成本优势(仅需霍尔传感器),但存在±20%转矩脉动。文章还提供了核心代码实现,包括霍尔信号生成、六步换相状态机和转矩分析脚本,并对比了六步换相

MHD0815的博客 149

matlab 点云按高程进行赋色【2024最新版】

首先按照Z轴方向求取所在点云的高程极值(包括高程最大值与最小值),然后将高程归一化到0~255范围内,最后采用matlab中的colormap颜色渲染函数进行赋色并保存渲染结果到点云。

点云侠的博客 3342

Go Mediator中介者模式

Mediator 中介者 动机(Motivation) 在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。 在这种情况下,我们可以使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好的抵御变化。 模式变化 用一个中介对象来封装(封装变化)一系列的对象交互。...

justinsun221的博客 261

QT实现计算器(C/C++)

digitClicked()槽函数用于处理数字按钮的点击事件,operatorClicked()槽函数用于处理运算符按钮的点击事件,equalsClicked()槽函数用于处理等号按钮的点击事件。在operatorClicked()槽函数中,我们获取被点击按钮的文本作为当前运算符,并将文本框中的内容转换为双精度浮点数,存储为操作数1。在上述代码中,我们添加了一个私有成员变量m_operand1,用于存储第一个操作数的值,以及一个私有成员变量m_currentOperator,用于存储当前运算符的值。

CyberNova的博客 385

中介者(Mediator)模式

中介模式C++实现

qq_51247411的博客 298

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

设计模式: Mediator 中介者模式

设计模式: Mediator 中介者模式 文章目录设计模式: Mediator 中介者模式简介参考完整示例代码正文场景模式结构代码实现:文字对话框Widgets 窗口组件DialogDirector 对话框导向器测试结语模式特点 简介 目的 创建型 结构型 行为型 类 Factory Method 工厂方法 Adapter 适配器 Interpreter 解释器Template Method 模版方法 对象 Abstract Factory 抽象工厂Builder 生成器Prototyp

超悠閒的博客 300

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

DesignPatternsPHP:Mediator中介者模式协调对象的终极指南

在软件开发中,对象间的复杂交互常常导致代码耦合度过高、维护困难。**Mediator中介者模式**作为一种行为型设计模式,通过引入中介者对象来封装多个对象之间的交互逻辑,显著降低系统复杂度。本文将通过DesignPatternsPHP项目中的实战案例,带你快速掌握这一设计模式的核心原理与应用技巧。 ## 🤔 为什么需要中介者模式? 当系统中存在多个对象需要相互通信时,传统的直接交互方式会形成

gitblog_00073的博客 772

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

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

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

接口隔离模式 在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题、甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来互相紧密关联的接口是一种常见的解决方案。 典型模式 Facade Proxy Adapter Mediator Mediator 动机( Motivation ) 在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系 ,如果遇到一-些需求的更改,这种直接的引|用关系将面临不断的变化。 在这种情况下,我们可使用一个“中介对象”来管

Cdreamfly的博客 522

中介者模式(Mediator)

一、实验目的: 1) 掌握中介者模式(Mediator)的特点 2) 分析具体问题,使用中介者模式进行设计。 二、实验环境: Eclipse 三、实验内容: 某软件公司要开发一套CRM系统,其中包含一个客户信息管理模块,所设计的“客户信息管理窗口”界面效果图如下图所示: 用JAVA语言实现(C#控制台应用程序实现)该模式。绘制该模式的UML图。 【模式UML图】 ...

sinat_40959511的博客 453

Mediator中介者模式

内存碎片的产生:         内存分配有静态分配和动态分配两种        静态分配在程序编译链接时分配的大小和使用寿命就已经确定,而应用上要求操作系统可以提供给进程运行时申请和释放任意大小内存的功能,这就是内存的动态分配。         因此动态分配将不可避免会产生内存碎片的问题,那么什么是内存碎片?内存碎片即“碎片的内存”描述一个系统中所有不可用的空闲内存,这些碎片之所以不能

tianmo2010的专栏 1010

设计模式——中介者模式_Mediator Pattern

中介者模式: Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicity, and it lets you vary their interac

497

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

Mediator中介者模式 作用:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 UML如下: Colleage抽象同事类,而ConcreteColleage是具体同时类,每个具体同事只知道自己的行为,而不了解其他同事类的情况,但它们却都认识中介者对象,Mediator是抽象中介者,定义了同事对象

u011643157的专栏 347

【GeekBand】C++设计模式笔记17_Mediator_中介者模式

【GeekBand】C++设计模式笔记17_Mediator_中介者模式

qq_38154295的博客 612

当我们聊中介的时候,我们在聊什么?中介者模式 Mediator (调停模式)

写在前面 迪米特法则 只与你的直接朋友交谈,不跟“陌生人”说话。其含义是:如果两个软件实体无需直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合性,提高模块直接的相对独立性。 【行为型】中介者模式 Mediator (调停模式) 中介者模式定义:定义一个中介对象来封装一系列对象的交互,是原有对象之间的耦合松散,且可以独立的改变他们之间的交互。中介者模式又叫调停模式 如果说应用的话,一个典型的例子:消息队列。没错大名鼎鼎的 消息队列 就是典型的中介者模式 模式结构

dying 搁浅 327

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

23种设计模式之中介者模式(Mediator) 中介者模式是一种对象的行为型模式,通过一个中介对象来封装一系列的对象交互。中介者使得各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者对象的存在保证了对象结构上的稳定,也就是说,系统的结构不会因为新对象的引入带来大量的修改工作。 优点: 1)去除对象间的影响。 2)简化了对象间协议。 3)集中化了控制。

极简的随笔 2148

设计模式之Mediator(中介者)

Mediator中介者模式定义:用一个中介对象来封装一系列关于对象交互行为.为何使用Mediator?各个对象之间的交互操作非常多;每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉及到修改很多其他对象的行为,如果使用Mediator模式,可以使各个对象间的耦合松散,只需关心和 Mediator的关系,使多对多的关系变成了一对多的关系,可以降低系统的复杂性,提高可修改扩展性.如何使用?

旅行人生 1016
上一篇: Iterator 迭代模式
下一篇: Memento 备忘模式
zigzagsoft
博客等级 码龄19年 34粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值