GOF23设计模式之 中介者模式Mediator

threejs开发可视化数字城市效果 theme: condensed-night-purple 灵感图 现在随着城市的发展,越来越多的智慧摄像头,都被互联网公司布到城市的各个角落,举一个例子,一个大楼上上下下都被布置了智能摄像头,用于监控火势,人员进出,工装工牌佩戴等监控,这时候为了美化项目,大公司都会将城市的区域作为对象,进行3d可视化交互,接下来的内容,就是基于以上元素,开发的一款城市数据可视化的demo,包含楼宇特... 阅读详情

核心

  • 如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多的关系,将熬制关系及其复杂,这些对象称之为 “同事对象”
  • 我们可以阴雨一个中介者对象,使各个同事对象只跟中介者打交道,将复杂的网络结构化解为星形结构。

中介者模式类图

这里写图片描述

中介者模式的本质

  • 解耦多个同事对象之间的交互关系。每个对象都持有中介者对象的引用,只跟中介者对象打交道。我们通过中介者对象统一管理这些交互关系

开发当中常见的场景

  • MVC模式(其中的C,控制器就是一个中介者对象。M和V都和他打交道)
  • 窗口游戏程序,窗口软件开发中窗口对象也是一个中介者对象
  • 图形界面开发GUI中,多个组件之间的交互,可以通过引入一个中介者对象来解决,可以使整体的窗口对象或者DOM对象
    -Java.lang.reflect.Method#invoke()

一种实现

  • Mediator
package com.coderbean.mediator;

/**
 * Created by Chang on 15/10/3.
 */
public interface Mediator {
    void register(String dname, Department d);
    void command(String name);
}
  • President
package com.coderbean.mediator;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by Chang on 15/10/3.
 */
public class President implements Mediator {

    private Map<String,Department> map = new HashMap<String, Department>();

    @Override
    public void register(String dname, Department d) {
        this.map.put(dname,d);
    }

    @Override
    public void command(String name) {
        map.get(name).selfAction();
    }
}
  • Department
package com.coderbean.mediator;

/**
 * 同事类接口
 * Created by Chang on 15/10/3.
 */
public interface Department {
    void selfAction();  //做本部门的事情
    void outAction();   //向总经理发出申请
}
  • Finacial
package com.coderbean.mediator;

/**
 * Created by Chang on 15/10/3.
 */
public class Finacial implements Department {

    private Mediator m;

    public Finacial(Mediator m) {
        this.m = m;
        m.register("Finacial", this);
    }

    @Override
    public void selfAction() {
        System.out.println("数钱");
    }

    @Override
    public void outAction() {
        System.out.println("汇报工作,钱太多了,不知道怎么花?");
    }
}
  • Market
package com.coderbean.mediator;

/**
 * Created by Chang on 15/10/3.
 */
public class Market implements Department {

    private Mediator m;

    public Market(Mediator m) {
        this.m = m;
        m.register("Market", this);
    }

    @Override
    public void selfAction() {
        System.out.println("跑去接项目");
    }

    @Override
    public void outAction() {
        System.out.println("汇报工作,项目承接的进度,需要资金支持");
        m.command("Finacial");
    }
}
  • Development
package com.coderbean.mediator;

/**
 * Created by Chang on 15/10/3.
 */
public class Development implements Department {

    private Mediator m;

    public Development(Mediator m) {
        this.m = m;
        m.register("Development", this);
    }

    @Override
    public void selfAction() {
        System.out.println("专心科研,做研发");
    }

    @Override
    public void outAction() {
        System.out.println("汇报工作,没钱了");
    }
}
  • Client
package com.coderbean.mediator;

/**
 * Created by Chang on 15/10/3.
 */
public class Client {
    public static void main(String[] args) {

        Mediator mediator = new President();
        Department market = new Market(mediator);
        Department department = new Development(mediator);
        Department Finacial = new Finacial(mediator);

        market.selfAction();
        market.outAction();
    }
}
如何将 Fiori Elements Object Page Header 工具栏里按钮用 JavaScript 代码设置成禁用状态 本文介绍了如何在SAP Fiori Elements应用中动态控制Object Page工具栏按钮的可用状态。通过UI5 Inspector工具分析发现,这些按钮的enabled属性都双向绑定到/ui/enabled模型字段。在StatusExt.controller.js中,通过获取按钮ID前缀拼接完整控件ID,使用setEnabled(false)方法即可禁用按钮。关键点包括:1)使用extensionAPI获取视图ID前缀;2)注意事件回调中的this上下文绑定;3)通过修改模型字段可同步更新所有绑定 阅读详情

相关推荐

SAP公司间外协业务流程以及配置说明

SAP公司间外协业务流程以及配置说明

竹大的博客 7161

Macbook Pro上如何修改brew源

一、需求说明 我的macbook电脑安装了中科大的brew源码,发现安装gpg工具失败,其他工具可以正常安装,为了能将gpg安装成功,就找了找切换brew源的方案,记录如下。 二、切换至国内源 由于使用github默认源有可能存在路径远或者部分服务访问超时的原因,切换至国内源可以提速。 2.1 替换brew.git $ cd "$(brew --repo)" # 中国科大: $ git remote set-url origin https://mirrors.ustc.edu.cn/brew.git #

bufegar0的博客 1078

设计模式——中介者模式(本质:封装交互)

一、课本例子:联合国安理会做中介者: UML图(自己画 vs 自动生成):自己的描述不准确。。。 代码实现: package 安理会; public abstract class UniteNations { public abstract void declare(String message,Coun...

又菜又爱玩 377

三维(点云)语义分割概述以及方法总结

语义分割 语义分割需要两部分 classification: 需要全局信息 segmentation:更加依赖全局信息和局部信息 一般的网络结构是: 提特征-特征映射-特征图压缩(降维)-全连接-分类,其实就是encoder-decoder的过程, 比如在二维的的pspnet,fcn等等 0. 三维表示的数据结构 Point cloud 无序性 点云实际上是无序的,比如有8个点云,你放到...

renhaofan的博客 3万+

具身智能数据采集的工程化指南:从时间同步到质量校验

具身智能的模型训练离不开高质量的多模态轨迹数据,而数据采集并非简单的传感器记录。真实场景中,相机图像、机械臂关节状态与力觉信息必须在时间轴上精确对齐,标定的漂移和格式混乱会让看似正常的数据无法用于训练。时间同步与标定一致性,是决定数据质量的核心技术环节。在机器人抓取、操作等工程应用中,一套包含多传感器同步、轻量记录脚本、自动化质量校验与版本管理的数据采集流程,能大幅降低数据生产的失败率。本文从工程视角拆解具身数据采集中的典型问题,并给出可落地的流程设计与校验方法,帮助团队构建可持续迭代的高质量数据集。

weixin_30603633的博客 510

设计模式入门——中介者模式(mediator)

前言 中介者模式又称为调停者模式,作为行为型的模式之一,本身是个很低调的模式,因为应用场合有限,所以不那么被人熟知 下文我将举例介绍中介者模式的作用,以及中介者模式应用的意义,文末我会总结一下中介者模式的一些特点   实例引入        假设现在科技发达之后,家里所有设备都是智能化的,而小明在家洗澡的时候有个习惯就是喜欢听歌,而且洗澡时候还要把窗帘拉上。因此就有这种情形,小明...

zhen921的博客 1万+

交换机背板带宽、交换容量与包转发率到底是啥?

在网络工程中,交换机是核心设备之一,而关于它的性能指标,背板带宽、交换容量、以及包转发率往往成为人们衡量其性能的重要参数。这些术语的定义、关系、以及在实际场景中的应用,都对交换机的选型与部署有着重要意义。本文将为您全面解读这些概念,帮助您深入了解交换机的核心性能指标。

网络技术联盟站 1548

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

中介者模式本质 解耦多个部门对象之间的交互关系。每个对象都持有中介者对象的引用,只跟中介者对象打交道。我们通过中介者对象统一管理这些交互关系 android最常见的场景 MVC模式(其中的C),控制器就是一个中介者对象。M和V都和它打交道 总经理接口:总经理有两件事情:注册每个部门,向部门发送命令 //总经理接口 public interface Mediator { v

奋斗&努力 319

GitLab CI/CD .gitlab-ci.yml 关键词(十一):发布版本 release

本篇文章介绍使用GitLab CI/CD 发布一个版本,对外发布。并填写一些发布的信息。

知无涯 4717

语音识别:PyAudio、SoundDevice、Vosk、openai-whisper、Argos-Translate、FunASR(Python)

本文介绍了Python中常用的音频处理库PyAudio,详细解析了其核心功能、核心概念和典型工作流程。PyAudio是一个跨平台的音频I/O库,支持音频录制、播放、实时流处理和低延迟操作。核心概念包括PyAudio类(管理音频设备和流)和Stream类(代表音频流)。文章重点讲解了open()方法的关键参数、回调函数的使用方式以及典型的工作流程,包括设备查询、流配置和资源释放。PyAudio适用于需要实时音频处理的场景,如语音识别和音频效果处理。

算法工程师 705

浅谈Java设计模式——中介者模式(Mediator)

一、概述         用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介对象用来封装对象之间的关系,各个对象可以不需要知道具体的信息通过中介者对象就可以实现相互通信。它减少了对象之间的互相关系,提供了系统可复用性,简化了系统的结构。各个对象不需要互相知道了解,他们只需要知道中介者对象即可,但是中介者对象就必须要知...

IdealSpring的博客 717

CarSim仿真快速入门(十八)-CarSim2021中的混合动力和纯电动系统

CarSim和TruckSim包括用于电动汽车(BEV)和混合电动汽车(HEV)的动力总成系统。电动和混合电动系统可与所有现有驱动系统配合使用,例如:FWD,RWD,AWD和多轴驱动系统。混合动力/电动系统模型还包括电池管理控制。CarSim或TruckSim中的默认动力总成是为闭环速度控制器提供的备用动力总成。要安装和使用完整的动力总成,请从Vehicle: Assembly库或Vehicle: Lead Unit 库链接到Powertrain数据集。在“动力总成”界面上,从下拉列表控件中选择以下三个选项

小明师兄的博客 7455

GOF23设计模式——中介者模式(Mediator)

中介者模式 /** * 中介者接口 */ public interface Mediator { void register(String dname,Department department); void command(String dname); } /** * 总经理 */ public class President implements Mediato...

技术分享记录 248

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

GOF23设计模式之中介者模式(mediator)

一、中介者模式概述   如果一个系统中对象之间的联系呈现网状结构,对象之间存在大量多对多的关系,导致关系及其复杂,这时可以引入一个中介者对象,使得各个对象只跟中介者对象打交道,从而将复杂的网络结构化为星型结构。   核心:     (1)如果一个系统中对象之间的联系呈现网状结构,对象之间存在大量的多对多关系,将导致关系及其复杂,这些对象称为“同事对象”;     (2)这时可以引...

dcpvpf6917的博客 156

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

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

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

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

Tumbler 275

假人有限元模型

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

[导入]C#面向对象设计模式纵横谈(17):(行为型模式) Mediator 中介者模式.zip(8.75 MB)...

讲座内容: 本培训课程探讨GoF23之 Mediator 中介者模式的意图、动因、原理、应用场景与C#语言实现,以及该模式在.NET框架程序设计中的具体应用。 课程讲师: 李建忠 上海祝成信息科技有限公司 高级培训讲师 MSDN特邀讲师 .NET技术专家,C++/CLI 专栏作家。南京邮电学院毕业,历任程序员,高级程序员,开发主管。现为上海祝成科技软件架构师,高级培训讲师。译著Micros...

weixin_30505043的博客 67

23种设计模式之python实现--中介者模式

刚居然接到大众点评的电面了,20多天没一点消息,一下子接到电话一点准备也没有,唉,结果8分钟就把我挂了。还是继续写我的设计模式吧,这几天貌似脑袋进浆糊了,yi

天恒の永恒 1253

六.java进阶-Java设计模式:23种设计模式(GoF23)学习这一篇就够了(详细)

设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。 1995 年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑,人称「GoF设计模式」。 这 23 种设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性,以及类的关联关系和组合

ThatsThePrice的博客 1386

设计模式之GOF23中介者模式

中介者模式Mediator 场景:公司中各个部门需要交互,通过中介总经理进行交互 核心: 如果一个系统中对象之间的联系成网状结构,对象之间多对多,将导致关系极其复杂,这些对象统称为“同事关系” 我们可以引入一个中介者对象,使各个同事对象只和自身与中介者打交道,中介再去其他部门交互 中介者模式的本质: 解耦多个同事对象之间的交互关...

qq_44711190的博客 165

Java 中的 23 种设计模式详解

项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

微笑听雨 7万+

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

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

星Yeah 的博客 2335

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

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

极简的随笔 2148

23种设计模式 3 行为型模式 之3.6 mediator 中介者模式

本文基本是搬运,搬运自网友k_eckel 的书籍《设计模式精讲-GoF 23种设计模式解析附C++实现源码》

刀法孜然的博客 633

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

概念 Mediator模式也叫中介者模式,是由GoF提出的23种软件设计模式的一种。Mediator模式是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。 动机 在软件架构过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。 在这种情况下,我们可以使用一个中介对象管理对象间的关联关系,避免互相

weixin_45606518的博客 282

GOF设计模式

设计模式的使用: 首先,设计模式有其应用的场合,不相宜的场合乱用设计模式有害无益;其次,设计模式主要解决对象之间相互通信、 相互依赖的结构关系。 在描述一个设计模式时,至少需要包含四个方面:模式名称(Pattern name)、问题(Problem)、解决方案(Solution)、效果(Consequence)。 设计模式要有自己的名称。 设计模式的目的就是解决问题。 ...

程序员杂谈 7757
上一篇: GOF23设计模式之 迭代器模式
下一篇: GOF23设计模式之 命令模式command
coderbean
博客等级 码龄11年 12粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值