JAVA设计模式十三:--Mediator(中介者模式)

【愚公系列】二十三种设计模式(十七)-中介者模式(Mediator Pattern) 设计模式(Design Pattern)是软件开发领域的宝贵经验,是多人反复借鉴和广泛应用的代码设计指导。它们是一系列经过分类和归纳的代码组织方法,旨在实现可重用性、可维护性和可理解性。使用设计模式,我们能够编写高质量的代码,使其更易于他人理解,并提供了代码可靠性的保证。毫无疑问,设计模式对个人、团队和整个系统都带来了显著的益处。它们将代码开发提升到工程化水平,为软件工程构建提供了坚实的基础,就如同大厦的一块块精巧的砖石一样。在项目中明智地应用设计模式可以完美地解决各种复杂问题。 阅读详情
一、中介者模式简介(Brief Introduction)
中介者模式(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 explicitly, and it lets you vary their interaction independently。中介者减少了各个同事对象的
耦合,使得可以独立地改变和复用各个同事对象和中介者类;由于把对想如何协作进行了抽象,将中介作为一个独立的概念并将其封
装在一个对象中,这样关注的对象就从对象各自本身的行为转移到他们之间的交互上来,也就是站在一个更宏伟的角度去考虑系统。
二、解决的问题(What To Solve)
中介者模式一般应用于一组对象以定义良好但是复杂的方法进行通信的场合,以及想定制一个分布在多个类中的行为,而不想生成太
多的子类的场合。


三、中介者模式分析(Analysis)

如图:

举例如下(举例是去中介交换水果):

[java]  view plain copy print ?
  1. package design.mediator;  
  2.   
  3. /** 
  4.  * 文件名称:Fruits.java 
  5.  * 创建人:Fei Wong 
  6.  * 创建时间: Jun 21, 2012 
  7.  * 电子邮箱:feiwong8@126.com 
  8.  * 说明:定义各种水果,大家都可以去中介进行交换 
  9.  * */  
  10.   
  11. public enum Fruits {  
  12.     APPLE , BANANA , ORANGE , PEAR , GRAPE , PEACH    
  13. }  
  14.   
  15.   
  16.   
  17.   
  18. package design.mediator;  
  19.   
  20. import java.util.HashMap;  
  21. import java.util.Map;  
  22.   
  23. /** 
  24.  * 文件名称:Intermediary.java 
  25.  * 创建人:Fei Wong 
  26.  * 创建时间: Jun 21, 2012 
  27.  * 电子邮箱:feiwong8@126.com 
  28.  * 说明,设置交换规则, 
  29.  *  如。苹果只能交换香蕉 等 
  30.  * */  
  31.   
  32. public class Intermediary {  
  33.     private static Map<Fruits,Fruits>changeFruits;  
  34.     /** 
  35.      * 设定交换规则 
  36.      * */  
  37.     static{  
  38.         changeFruits = new HashMap<Fruits, Fruits>() ;  
  39.         changeFruits.put(Fruits.APPLE , Fruits.BANANA ) ;   
  40.         changeFruits.put(Fruits.BANANA , Fruits.GRAPE ) ;    
  41.         changeFruits.put(Fruits.GRAPE , Fruits.ORANGE ) ;    
  42.         changeFruits.put(Fruits.ORANGE , Fruits.PEACH ) ;    
  43.         changeFruits.put(Fruits.PEACH , Fruits.PEAR ) ;    
  44.         changeFruits.put(Fruits.PEAR , Fruits.APPLE ) ;  
  45.     }  
  46.       
  47.     /** 
  48.      * 获取能交换到的水果  
  49.      * */  
  50.     public static Fruits get(Fruits fruit) {  
  51.         return changeFruits.get( fruit ) ;    
  52.     }  
  53. }  
  54.   
  55.   
  56. package design.mediator;  
  57.   
  58. /** 
  59.  * 文件名称:Main.java 
  60.  * 创建人:Fei Wong 
  61.  * 创建时间: Jun 21, 2012 
  62.  * 电子邮箱:feiwong8@126.com 
  63.  * 测试 
  64.  * */  
  65.   
  66. public class Main {  
  67.       
  68.     public static void main(String[] args) {  
  69.         Mediator mediator1 = new Mediator() ;  
  70.         Mediator mediator2 = new Mediator() ;  
  71.         Mediator mediator3 = new Mediator() ;  
  72.         Mediator mediator4 = new Mediator() ;  
  73.         Mediator mediator5 = new Mediator() ;  
  74.         Mediator mediator6 = new Mediator() ;  
  75.           
  76.         mediator1.put( Fruits.APPLE ) ;   
  77.         mediator2.put( Fruits.BANANA ) ;   
  78.         mediator3.put( Fruits.GRAPE ) ;   
  79.         mediator4.put( Fruits.ORANGE ) ;   
  80.         mediator5.put( Fruits.PEACH ) ;   
  81.         mediator6.put( Fruits.PEAR ) ;    
  82.           
  83.         System.out.println( "我拿到了-->" + mediator1.get() );  
  84.         System.out.println( "我拿到了-->" + mediator2.get() );  
  85.         System.out.println( "我拿到了-->" + mediator3.get() );  
  86.         System.out.println( "我拿到了-->" +mediator4.get() );  
  87.         System.out.println( "我拿到了-->" +mediator5.get() );  
  88.         System.out.println( "我拿到了-->" +mediator6.get() );  
  89.     }   
  90.   
  91. }  
  92.   
  93.   
  94. package design.mediator;  
  95.   
  96. import java.util.List;  
  97. import java.util.Vector;  
  98.   
  99. /** 
  100.  * 文件名称:IMediator.java 
  101.  * 创建人:Fei Wong 
  102.  * 创建时间: Jun 21, 2012 
  103.  * 电子邮箱:feiwong8@126.com 
  104.  * 中介的功能就是两个, 
  105.  *  1、拿客户的的水果 
  106.  *  2、给客户新的水果 
  107.  * 中介仓库 
  108.  *    仓库里面存放水果 
  109.  * */  
  110.   
  111. public interface IMediator {  
  112.     List<Fruits> fruits = new Vector<Fruits>() ;   
  113.     void put(Fruits fruits) ;  
  114.       
  115.     Fruits get() ;   
  116. }  
  117.   
  118.   
  119.   
  120.   
  121. package design.mediator;  
  122.   
  123.   
  124. /** 
  125.  * 文件名称:Mediator.java 
  126.  * 创建人:Fei Wong 
  127.  * 创建时间: Jun 21, 2012 
  128.  * 电子邮箱:feiwong8@126.com 
  129.  * 说明: 
  130.  *   实际交换位置 
  131.  * */  
  132.   
  133. public class Mediator implements IMediator {  
  134.       
  135.     private Fruits fruit = null ;  
  136.       
  137.     @Override  
  138.     public Fruits get() {  
  139.         if(fruit == null){  
  140.             return null ;  
  141.         }  
  142.         Fruits f = Intermediary.get( fruit ) ;    
  143.         if(fruits.contains(f)){  
  144.             fruits.remove( f ) ;   
  145.             return f ;  
  146.         }  
  147.         return null ;   
  148.     }  
  149.   
  150.     @Override  
  151.     public void put(Fruits fruit) {   
  152.         this.fruit = fruit ;  
  153.         synchronized(IMediator.class ) {  
  154.             IMediator.fruits.add( fruit ) ;   
  155.         }  
  156.     }  
  157.   
  158. }  

【Java设计模式】Java设计模式之(十)中介者模式(Mediator Pattern) 所有设计模式的代码实现例子都可在码云上查看哦,感兴趣的可以查看哈,码云地址:https://gitee.com/no8g/java-design-patterns 阅读详情

相关推荐

SAP CO-PA数据传送避坑指南:销售开票与FI/MM记账的日常配置实操(含KEKF/KE4I/KEI2)

本文深入解析SAP CO-PA数据传送中的常见配置问题,特别是销售开票与FI/MM记账环节的实操避坑指南。通过KEKF/KE4I/KEI2等关键配置点的详细说明,帮助用户避免数据失真和重复记录,提升获利能力分析的准确性。文章结合实战案例,揭示官方文档未提及的'数据黑洞'形成机制,为SAP顾问提供实用的排雷手册。

weixin_26905487的博客 391

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

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

weixin_43139800的博客 994

Xilinx Chip2Chip IP核实战:Aurora PHY通信配置与仿真避坑指南

本文深入解析Xilinx Chip2Chip IP核与Aurora PHY的通信配置与仿真优化,提供实战避坑指南。通过AXI协议转换桥实现FPGA间高速数据传输,详细讲解Aurora PHY参数设置、仿真加速技巧及常见问题解决方案,帮助工程师快速部署稳定高效的芯片间通信系统。

g5h6i7j的博客 1007

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

break;break;if (note!});break;break;break;break;

zhao_kang_cheng的专栏 411

Unity获取透明物体深度数据

Unity获取透明物体深度数据前言透明&景深需求模型透明度部分带透明通道图片/视频部分半透明模型获取深度的具体实现方法带透明度图片/视频获取深度的具体实现方法结束语 前言 最近在做的项目有很多奇怪的需求,甚至之前在unity里用插件写了一个类似于蓝图的行为树插件,之后有时间给大家讲一讲相关的实现方法,今天刚解决了unity里透明物体无法获得深度数据的问题。所以分享给大家。 透明&景...

可以吃的妙脆角的博客 2632

Python爬取京东商品数据保姆级教程(附源码及效果图)

本文介绍了一个基于Python的京东商品数据爬取教程,适合入门级开发者使用。文章详细讲解了从安装依赖库(DrissionPage、pandas等)到完成数据爬取的全过程,包括:1. 模拟用户搜索操作;2. 解析商品标题、价格、销量等关键信息;3. 处理复杂数据格式(如转换万级销量);4. 数据存储与Excel导出。教程提供了完整的封装函数,支持自定义搜索关键词和爬取数量,并包含错误处理和多种元素定位方式。最终数据会按时间戳命名导出为Excel文件,方便用于课程作业或毕业设计。

weixin_46449236的博客 1874

Java【中介者模式】详解

Java中的中介者模式(Mediator Pattern)是一种行为设计模式,它的主要目标是降低多个对象之间的交互复杂度,通过引入一个中介者对象来管理这些对象之间的通信,从而减少对象间的直接依赖。

kiingking的博客 460

数据资产目录(SailCatalog)和数据地图(SailMap)

笔者接下来准备开发大数据平台(XSailboat)中的数据资产目录(SailCatalog)和数据地图(SailMap)相关的功能,本文用以记录笔者关于此部分功能的概念梳理和主体功能设计。

OkGogooXSailboat的博客 2327

Java 设计模式之Mediator调节者模式

使用场景: 对象之间的交互很复杂时,定义一个调节者对象封装一系列对象之间的交互,使原有对象之间解耦,只与调节者对象交互。 结构模式: 抽象调节者接口Mediator,具体调节者实现类ConcreteMediator 抽象被调节者接口Colleague,具体被调节者实现类Buyer, Seller 每个被调节者拥有一个调节者对象 优点: 降低对象之间的耦合度; 将一对多关联转为一对一关联,提高系统灵活性,使系统易于扩展和维护 缺点: 当对象很多时,调节者的职责会很大,不好维护 举个房屋买卖

风香枫 293

1️⃣ Coze智能体基础入门教学(2025年全新版本)

不妨设想一下,倘若我们能够打造出一个数字助手,它不但能精准洞悉我们的需求,更可以独立思索、学习以及付诸行动,这便是 AI Agent 的基础理念。它恰似计算机世界里的 “智慧精灵”,能够感知周遭环境、做出判断并采取行动。AI Agent 的发展之路精彩纷呈。它走过了三个重要阶段:起初,它犹如一个被规则束缚的机器人,只能按预设好的指令开展工作。接着,它学会运用统计学方法,通过分析数据来做决策,变得越发灵活。到如今,凭借深度学习技术,它已经能够像人类一样去学习复杂的任务了。

李同学Lino的博客 4087

GPU 运维实战:H100/H800/B300 换卡与压测

(烧多久、看什么、什么算合格)。文末还给了一个能直接跑的验收判定脚本,三个真实场景的裁决输出都在。

老韩的Linux云计算架构师进阶之路 275

java mediator_中介者模式(Mediator)_java实现

//20210129写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现命令模式中介者模式核心思想设置一个中介者,来通信所有相关的类举例:MVC模型,Controller(C)是Model(M)和View(V)的中介,负责通信二者,解读消息程序源代码:这里为了方便理解,实现了一个美国、伊拉克通过中介(联合国安理会)沟通的场景/*** 抽象国家类*/pu...

weixin_29356815的博客 256

微信小程序转发功能异常报错 由于小程序违规分享功能暂时无法使用的解决办法

小程序右上角转发功能被封,不代表你违规了,而可能是你没认证、没备案!很多功能都是“先合规、后开发”,踩坑就晚了,别像我一样绕了三圈才发现问题。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2615

JAVA 二十三种设计模式大全(四)中介者模式(Mediator Pattern)

中介者模式(Mediator Pattern) 概念 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。 比如消息中间件mq 介绍 **意图:**用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 **主要解决:**对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同

自救 唯有自强 160

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JAVA设计模式十三--Mediator(中介者模式)

一、中介者模式简介(Brief Introduction) 中介者模式(Mediator Pattern),定义一个中介对象来封装系列对象之间的交互。中介者使各个对象不需要显示地相互引用, 从而使其耦合性松散,而且可以独立地改变他们之间的交互。 Define an object that encapsulates how a set of  objects interact. Mediato

Y-CAT的专栏 1489

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java二十三种设计模式-中介者模式(22/23)

中介者模式是一种行为型设计模式,它通过引入一个中介者对象来封装一系列对象之间的交互,从而实现对象间的解耦。为何需要中介者模式:降低耦合度:中介者模式减少了对象之间的直接交互,降低了系统各部分之间的耦合度。集中管理交互:提供了一个集中的地方来管理对象间的通信逻辑,简化了复杂系统的设计。易于扩展和维护:当需要增加新的交互逻辑或对象时,可以不必修改已有对象,只需扩展中介者。中介者模式:适合于多对多通信,需要集中管理交互的场景。观察者模式:适合于一对多通信,事件驱动的场景。命令模式。

小相探索IT世界 1876

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

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

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

中介者模式(Mediator Pattern)是一种行为设计模式,旨在减少对象之间的直接依赖,通过引入一个中介者对象来协调多个对象之间的交互。这种模式特别适用于对象间存在复杂交互的场景,能够简化系统结构并降低耦合。中介者模式的核心是封装对象间的交互,避免对象直接相互调用,而是通过中介者进行通信。这样,对象只需与中介者交互,而不需要知道其他对象的存在。降低耦合度对象之间不再直接依赖,而是通过中介者进行通信。每个对象只需知道中介者,而不需要知道其他对象的存在。集中管理交互逻辑。

flzjkl的博客 966

23种设计模式——中介者模式 (Mediator Pattern)详解

本文介绍了23种设计模式之——中介者模式 (Mediator Pattern)的说明及使用

Meteors.的博客 1193

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

中介者模式,又被称为调停者模式,是一种行为型设计模式,其核心思想是通过引入一个中介对象来封装一系列对象之间的交互。这种模式使得各对象不需要显式地相互引用,从而降低了它们之间的耦合度和依赖性,使得系统更易于维护和扩展。中介者模式的主要角色包括:抽象中介者(Mediator):定义中介者接口,声明各种业务方法。具体中介者(Concrete Mediator):实现抽象中介者接口,负责与各个同事对象之间的通信和协调。

miaoyl的博客 1633

中介者模式(Mediator Pattern)详解

中介者模式是一种行为型设计模式,它通过一个中介对象来封装一系列对象之间的交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式是一种强大的设计模式,它通过集中控制对象之间的交互,大大降低了系统的耦合度。当系统中的对象之间存在复杂的引用关系时,中介者模式是一个很好的选择。将原本分散在多个对象间的交互逻辑集中起来,使系统更加容易维护将多对多的依赖关系变成一对多的依赖关系,降低了类与类之间的耦合使各个组件可以独立地变化和复用,不再相互依赖。

yk_dflkg的博客 1250

设计模式: Mediator 中介者模式

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

超悠閒的博客 300

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

中介者模式(Mediator Pattern)是一种行为型设计模式,用于减少对象之间的直接相互依赖,使得对象间的交互通过一个中介者对象来进行协调。在中介者模式中,对象之间不再直接相互调用,而是通过中介者对象来传递消息和协调行为。 中介者模式的主要目的是简化对象之间的复杂交互关系,降低对象之间的耦合度,使得系统更加易于维护和扩展。通过将交互逻辑集中在一个中介者对象中,可以避免对象之间直接相互依赖和通信的混乱。 中介者模式适用于对象之间存在复杂网状结构关系,且这些关系导致依赖关系混乱和难以复用的场景。

m0_51176516的博客 3571

【设计模式】Java 设计模式之中介者模式(Mediator)

中介者模式是一种行为设计模式,它通过引入中介者对象来降低对象间的耦合度,简化交互逻辑。在中介者模式中,对象之间不再直接通信,而是通过中介者对象进行间接交互。这使得系统结构更加清晰,易于维护和扩展。中介者模式适用于对象间存在大量交互、需要集中控制交互行为的场景,如聊天室系统。在聊天室中,用户通过中介者(聊天室)发送和接收消息,无需直接与其他用户交互,降低了耦合度并简化了逻辑。中介者模式有助于降低系统复杂性,提高灵活性,是实际开发中处理复杂系统交互的有效手段。

新手村长的专栏 1628

设计模式第18讲——中介者模式(Mediator)

中介者模式是一种行为型设计模式,它主要用于减少对象之间互相通信的复杂性。一、什么是中介者模式 二、角色组成 三、优缺点 四、应用场景 4.1 生活场景 4.2 java场景五、代码实现 5.0 UML类图 5.1抽象中介者(Mediator)——LogisticsCenter5.2抽象同事类(Colleague)——Participant5.3具体同事类(Concrete Colleague)TransportCompany&Merchant5.4具体中介者(Con

让~学习~成为一种习惯(橡 皮 人の技术博客) 3292

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

中介者模式定义了一个中介对象来封装一系列对象之间的交互。这种模式使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。在中介者模式中,中介者负责处理对象间的通信和协作,对象间不再直接交互,而是通过中介者来间接通信。

shiming8879的博客 964
上一篇: JAVA设计模式十二:--State(状态模式)
下一篇: JAVA设计模式十四:--Visitor(访问者模式)
SuperDream
博客等级 码龄14年 5粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值