设计模式学习(二):中介者模式

【愚公系列】二十三种设计模式(十七)-中介者模式(Mediator Pattern) 设计模式(Design Pattern)是软件开发领域的宝贵经验,是多人反复借鉴和广泛应用的代码设计指导。它们是一系列经过分类和归纳的代码组织方法,旨在实现可重用性、可维护性和可理解性。使用设计模式,我们能够编写高质量的代码,使其更易于他人理解,并提供了代码可靠性的保证。毫无疑问,设计模式对个人、团队和整个系统都带来了显著的益处。它们将代码开发提升到工程化水平,为软件工程构建提供了坚实的基础,就如同大厦的一块块精巧的砖石一样。在项目中明智地应用设计模式可以完美地解决各种复杂问题。 阅读详情

2018年08月29日

《Head First 设计模式》中对中介者模式的描述:

使用中介者模式(Mediator Pattern)来集中相关对象之间复杂的沟通和控制方式。

优点:将对象彼此解耦,增加复用性; 简化系统维护; 让对象间传递的消息变的简单且精简;

缺点:设计不当会让中介者本身变的过于复杂。

目录

 

1、思路

2、测试代码

2.1 Person(抽象基类),

2.2 测试Demo

3、解释

4、参考


下面以“男生女生联谊”作为例子,简单阐述中介者模式的使用;

1、思路

既然联谊,男生和女生之间必然存在着互动,这些互动是非常频繁且复杂的,所以在开始阶段往往需要一个第三方bo(媒婆)来加快联谊的进程;而这个媒婆就是应用了中介者模式;


2、测试代码

2.1 Person(抽象基类),

package designModel.tertiumQuidModel;

public abstract class Person {

	private String name; //名字
	
	private int condition;  //匹配条件
	
	private Mediator mediator;  //中介者

	public abstract void checkPerson(Person person); //抽象方法,供子类重写
	
	public Person(String name, int condition, Mediator mediator) {
		super();
		this.name = name;
		this.condition = condition;
		this.mediator = mediator;
	}

	××× getter setter ×××
	
}

Man(实现子类)

public class Man extends Person {

	public Man(String name, int condition, Mediator mediator) {
		super(name, condition, mediator);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void checkPerson(Person person) {
		// TODO Auto-generated method stub
		this.getMediator().setMan(this);
		this.getMediator().getPartner(person);
	}
	
}

Woman(实现子类)


public class Woman extends Person{

	public Woman(String name, int condition, Mediator mediator) {
		super(name, condition, mediator);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void checkPerson(Person person) {
		// TODO Auto-generated method stub
		this.getMediator().setWoman(this);
		this.getMediator().getPartner(person);
			
	}

}

Mediator(媒婆)为中介者(作为成员属性)

package designModel.tertiumQuidModel;

public class Mediator {

	private Man man;
	
	private Woman woman;
	
	××× getter setter ×××
	
	public void getPartner(Person person){
		if(person instanceof Man){
			this.setMan((Man)person);
		}else{
			this.setWoman((Woman)person);
		}
		if(man.getCondition() == woman.getCondition()){
			System.out.println(man.getName()+" and "+woman.getName()+" 联谊成功!!");
		}else{
			System.out.println(man.getName()+" and "+woman.getName()+" 牵手失败!!");
		}
	}	
	
}

2.2 测试Demo

testDemo:

public class test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Mediator mediator = new Mediator();
		
		Person man = new Man("C罗",27,mediator);		
		Person woman = new Woman("伊莲娜",25,mediator);
		
		man.checkPerson(woman);
		
	}

}

结果:

C罗 and 伊莲娜 牵手失败!!

花边:2010年初,C罗和伊莲娜在阿玛尼春夏季时装发布会上认识,C罗是阿玛尼男士内衣形象代言人,伊莲娜是女士内衣形象代言人,两人的爱情从这里开始。相恋五年后分手,如今两人都有了新的归宿,伊莲娜也有了自己的孩子!

 

3、解释

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

2)这里就相当于两个具体的 Person 类,分别实现了抽象找对象方法,但是这里找对象可是通过中介介绍找的对象,  这个过程我们可以这样理解,因为抽象父类 Person 持有中介者 Mediator 类的引用,  所以我们这里的 getPartner 找对象方法,先是通过父类找到当前这个中介,然后注册相关会员信息,注册好后中介就会帮我们找对象了, 当我们调用找对象的方法,实际上是中介者帮我们找的对象;

3)中介者的出现减少了各个类之间的耦合,明确类之间的相互关系;  中介者模式将原来相互依存的多对多的类关系简化为中介者类与其他关联类一对多的关系,   当其中一个类修改时也不影响其他关联类。    
    

4、参考

过多内容关注微信公众号:《十三的笔记本》

CXL技术入门:从PCIe到高性能计算的桥梁(附最新2.0协议解析) 本文深入解析CXL技术如何作为PCIe的进化版,成为高性能计算的关键桥梁,特别聚焦CXL 2.0协议的关键升级。从技术架构、三大子协议到典型应用场景,全面介绍CXL在缓存一致性、内存共享等方面的优势,帮助开发者快速掌握这一前沿技术。 阅读详情

相关推荐

纽马克-贝塔法(Newmark-Beta Method)在结构动力学中的应用与实现

本文深入解析了纽马克-贝塔法(Newmark-Beta Method)在结构动力学数值计算中的核心原理与应用。作为经典的时间积分算法,它通过调节γ和β参数,在计算精度、稳定性与效率间取得平衡,尤其适用于地震响应、风振分析等工程场景。文章详细阐述了其数学内核、在有限元分析中的实现步骤,并对比了隐式与显式方案的适用场景,为工程师提供了关键的方法选择与参数调优指导。

weixin_29232121的博客 148

协调多个对象之间的交互——中介者模式(四)

20.4 中介者与同事类的扩展       Sunny软件公司CRM系统的客户对“客户信息管理窗口”提出了一个修改意见:要求在窗口的下端能够及时显示当前系统中客户信息的总数。修改之后的界面如图20-9所示:图20-9 修改之后的“客户信息管理窗口”界面图       从图20-9中我们不难发现,可以通过增加一个文本标签(Label)来显示客户信息总数,而且当用户点击“增加”按钮或者“删除”按钮时,

刘伟技术博客 9940

Comsol有限元网格剖分实战:从基础操作到高效仿真技巧

本文系统介绍了COMSOL有限元网格剖分的核心实战技巧。从基础的物理场控制与用户控制网格选择,到三角形、四边形、四面体等网格单元类型的适用场景,再到扫掠网格、边界层网格与复制网格等高效剖分方法,最后讲解了网格质量评估与几何预处理的关键步骤。旨在帮助用户掌握从自动到手动、从基础到高效的网格剖分艺术,实现仿真精度与计算效率的最佳平衡。

j7k8l的博客 375

协调多个对象之间的交互——中介者模式(二)

20.2 中介者模式概述       如果在一个系统中对象之间的联系呈现为网状结构,如图20-4所示。对象之间存在大量的多对多联系,将导致系统非常复杂,这些对象既会影响别的对象,也会被别的对象所影响,这些对象称为同事对象,它们之间通过彼此的相互作用实现系统的行为。在网状结构中,几乎每个对象都需要与其他对象发生相互作用,而这种相互作用表现为一个对象与另外一个对象的直接耦合,这将导致一个过度耦合的系统

刘伟技术博客 1万+

ORB-SLAM2算法部署验证、原理代码和各种改进方法汇总

本文主要汇总个人学习使用ORB-SLAM2算法中参考的相关博客和代码汇总,以及在ORB-SLAM2算法基础上各个改进方法的汇总。

重点记录机器人和自动驾驶相关领域的技术,尤其是计算机视觉,视觉SLAM等,不仅有前言文献或必备算法的学习,也会有实际应用的点滴经验 742

组态王与DLT645-2007电能表通讯调试总结

组态王与电力协议DLT 645-2007调试总结 DLT 645-2007是多功能电能表通信协议,该标准由中国电力企业联合会2006年提出,该协议为主-从结构的半双工通信方式。手持单元或其它数据终端为主站,多功能电能表为从站。每个多功能电能表均有各自的地址编码。通信链路的建立与解除均由主站发出的信息帧来控制。帧是传送信息的基本单元,每帧由帧起始符、从站地址域、控制码、数据域长度、数据域、帧信息纵向校验码及帧结束符7个域组成,每部分由若干字节组成,帧格式如图1所示。 1.确定设备地址 地址域由 6 个字节构

逍遥子的博客 1万+

协调多个对象之间的交互——中介者模式

转:http://blog.youkuaiyun.com/lovelion/article/details/8482952

lynchyo——得失只在刹那间 1130

一套适合 ABAP 初级和中级开发人员,从入门到提高的 ABAP 学习教程

曾几何时,ABAP 就是 SAP 的代名词。ABAP 这门编程语言造就了 SAP 名噪一时的 R/3 产品,同时也是如今 SAP 旗舰级产品,SAP S/4HANA 底层的实现语言。 ABAP 不仅代表着 SAP 这家公司在企业级管理软件市场辉煌的过去,ABAP 自身也在不断地进化着。SAP 不仅在本地部署(On-Premise)领域继续保持着自己绝对的统治地位,而且在云应用领域(Software-as-a-Service, 简称 SaaS), 也推出了自己的解决方案,比如 SAP S/4HANA Clo

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5919

瑞_23种设计模式_中介者模式

本文章为瑞_系列专栏之《23种设计模式》的中介者模式篇。中介者模式在框架设计中经常使用,即使框架内部再复杂,其使用方法也会相对简单。如Spring框架中的 BeanFactory 就是中介者模式的一个实现,它作为中介者,负责管理和创建应用程序中的所有 beans ,而不是让 beans 直接相互引用或创建。

阿瑞——从事Java后端,喜欢研读源码、自研框架、分享经验 2438

使用 Python 爬虫抓取 IMDb 电影信息 - 评分、评论与基本信息抓取教程

本文介绍了如何使用 Python 爬虫技术抓取 IMDb 电影评分、评论和基本信息。我们分别展示了通过IMDb API和两种方法抓取数据,并进行了数据存储、分析与可视化。在未来,我们还可以基于这些数据开发电影推荐系统、情感分析工具等,进一步丰富电影数据的应用场景。通过这些实践,您不仅学会了如何抓取和存储数据,还可以通过这些基础来构建自己的数据分析应用,获取更丰富的电影数据。

2201_76125261的博客 601

MaxScript批量修改材质、贴图名称

MaxScript批量修改材质、贴图名称1 实现效果1.1 修改前材质、贴图名称1.2 修改后2 代码 1 实现效果 1.1 修改前材质、贴图名称 1.2 修改后 2 代码 prefixName = "prefiname" maxFile = "maxfilepath" makeDir "newBitmappath" mapsPath = newbitmappath + "\\" fn formatStr index = ( str = index as string newS

郑德帅 3240

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

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

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

Higress 入门:初探阿里云原生 AI 网关

Higress 是一款由阿里巴巴推出的云原生 API 网关,其内核基于 Istio 和 Envoy。与传统 API 网关不同,它深度聚焦于 AI 场景,支持国内外众多主流模型供应商,如 OpenAI、百度文心一言等,还兼容基于 vllm/ollama 等自建的 DeepSeek 模型,能够满足不同类型企业对 AI 能力集成与管理的需求。Higress 作为一款功能强大的云原生 API 网关,在 AI 时代展现出独特的优势。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1865

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

本篇文章将23种设计模式中的迭代器模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 2万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

设计模式学习笔记--中介者模式

一.简介 今天来学习一下传说中的中介者模式。说到中介者,我们最容易想到的就是电话中继器,这里我们看看电话的演变过程吧。最早的电话只是两个通话的用户之间相连,这样的结构简单直接,操作最方便。但是随着使用电话的人数多了起来,为每两部电话之间架设一条线路很明显是不可能的,于是就有了电话中继器,记得以前经常看老电影里面,打电话的人要拿起电话,先打给接线员,说“给我接到XXX那”。没错,接线员就相当于中介

puppet_master的专栏 1525

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

从零开始学习Java设计模式 | 行为型模式篇:中介者模式

在本讲,我们来学习一下行为型模式里面的第七个设计模式,即中介者模式。 概述 在学习中介者模式之前,我们先来看下面这段描述。 一般来说,同事类之间的关系是比较复杂的(其实,这儿所说的同事类就是中介者模式里面的一个角色,而在这里,你可以先把它当作一个普通的类来看待),多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,既不利于类的复用,也不稳定。例如,下图中有六个同事类对象,假如对象1发生变化,那么将会有4个对象受到影响,因为对象1所属类和对象2、对象4、对象5、对象6所属类

李阿昀的博客 1461

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

666

weixin_70280523的博客 1124

java设计模式学习之【中介者模式】

这篇教程不仅提供了中介者模式的理论基础,还通过具体的Java代码示例展示了如何实现和应用这种模式。简单理解,通俗易懂

qq_33129875的博客 1289

《Java设计模式学习》中介者模式

中介者模式是一种行为型模式,它定义了一个中介者对象,该对象封装了一组对象之间的交互,并促进了这些对象之间的松耦合关系。中介者模式的目的是减少对象之间的直接依赖关系,从而提高系统的可维护性和可扩展性。中介者模式的核心思想是封装对象之间的交互,并将这些交互转移到中介者对象中。这样做的好处是,当一个对象发生变化时,只有中介者对象需要进行修改,而不需要修改所有与该对象交互的其他对象。中介者模式是一种非常有用的设计模式,它可以帮助我们解决对象之间的紧耦合关系和复杂交互问题。

一个不断前行的程序者 367

【设计模式】Java设计模式 - 中介者模式

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。

qq_43843951的博客 484

设计模式学习笔记(九:中介者模式)

1.1概述     用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。这就是中介者模式的定义。     一个对象含有另一个对象的引用是面向对象中经常使用的方式,也是面向对象所提倡的,即少用继承多用组合。但是怎样合理地组合对象对系统今后的扩展、维护和对象的复用是至关重要的,这也正是学习设计模式的重要原因。     ...

nimeimeidewen的专栏 359

DesignPattern_中介者模式_08

文章目录代码实现 代码实现 迪米特法则认为“每个类只和朋友类交流”,这个朋友类并非越多越好,朋友类越多,耦合性越大 package design.mediator; import java.util.Random; /** * @author huangqh * @create 2020/12/15 10:33 * @Notes 销售管理 */ public class Purchase { //采购IBM电脑 public void buyIBMcomputer(int num

qq_38438909的博客 132

设计模式——中介者模式

腾讯公司推出的QQ作为一款免费的即时聊天软件深受广大用户的喜爱,它已经成为很多人学习、工作和生活的一部分(不要告诉我你没有QQ哦,)。在QQ聊天中,一般有两种聊天方式:第一种是用户与用户直接聊天,第二种是通过QQ群聊天,如图20-1所示。如果我们使用图20-1(A)所示方式,一个用户如果要与别的用户聊天或发送文件,通常需要加其他用户为好友,用户与用户之间存在多对多的联系,这将导致系统中用户之间的关...

wry的博客 1062

【设计模式】中介者模式的解析与使用

系列文章目录 文章目录系列文章目录前言一、使用设计模式的目的二、实践是最好的老师2.1 中介者模式(飞机塔台)2.2 通信过程总结 前言 设计模式在系统编程的重要性不言而喻,如何一个程序没有使用设计模式,那么这个程序有可能会变成一团杂乱的线团,所以下面让我来介绍一下设计模式。 一、使用设计模式的目的 无论做什么事情,都会有目的,你的想法也许就是你的目的,你的目的也就是你的目标,坚定你的目标,才能实现你的目标。——wesigj 目的: 简述来说,设计模式可以提高软件设计的效率,提高团队沟通

wesigj的博客 482

设计模式之中介者模式

0x01.定义与类型 定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。 通过使对象明确地相互引用来促进松散耦合,并允许独立地改变它们的交互。 类型:行为型 模式简单实现 /** * 同事抽象类 */ public abstract class Colleague { //...

Yoroshiku IT 344

设计模式学习笔记——08 中介者模式

中介者模式 Mediator模式也叫中介者模式,Mediator模式是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。MVC中的C控制器就是一个中介者,它将M业务逻辑和V视图隔离开,把M运行的结果和V代表的视图融合成一个前端可以展示的页面,减少M和V的依赖关系。 优点 减少...

GM. 201
上一篇: Java(43):反射机制的使用
下一篇: Java(44):Comparable 接口 与 Comparator 接口的使用与比较
后台技术汇
博客等级 码龄11年 670粉丝 531原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后台技术汇

对你的帮助,是对我的最好鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值