Java中除去有设计原则之外,还有23中设计模式。

这些模式都是前辈们一点一点积累下来,一直在改进,一直在优化的,而这些设计模式可以解决一些特定的问题。

并且在这些模式中,可以说是将语言的使用体现的淋漓尽致。

那我们今天要学习  行为型模式  中的  中介者模式  !

中介者模式

先来百科一下,什么叫中介者模式

很好,又是没有任何的收获,这里我说一下啥叫中介者模式

中介者模式,顾名思义,肯定得先有一个中介者,也就是第三者,这个第三者主要是用来去做“维护的”

举例说明:好比我们找房子,我们不可能跑到一个城市到处找房子,因为我们不知道这个城市那里有空房子,在什么位置,如果一个一个去问,那这得问到什么时候,如果这时候有一个中介,他可以告诉我们那里有房子,这样我们是很省事的,并且如果房主修改了价格什么的,我们都可以直接就知道了消息。

中介者模式的定义与特点

中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。

中介者模式是一种对象行为型模式,其主要优点如下。

1. 降低了对象之间的耦合性,使得对象易于独立地被复用。

2. 将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展。

其主要缺点是:当同事类太多时,中介者的职责将很大,它会变得复杂而庞大,以至于系统难以维护。

这里我再说一下迪米特法则

迪米特法则

迪米特法则的定义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。

可以通俗的去说,就是我和微信还有银行卡之间的关系,我以前出门需要带很多银行卡,现在我只需要有一个微信就可以,直接通过微信支付,将我的钱扣除。

详细可以看我的博客:Java面向对象设计原则6——迪米特法则

中介者模式的结构与实现

1. 角色

我们先来看看有那些角色参与到这个模式中

1. 抽象中介者角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。

2. 具体中介者角色:实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。

3. 抽象同事类角色:定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。

4. 具体同事类角色:是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。

知道了角色之后,我们来写一个例子,这个例子就是这个房屋中介的例子

第一步:

我们先来定义一下,抽象中介者,这个其实就是房屋中介,我们还需要在这个抽象类中定义两个方法,就是用户注册和转发的方法

第二步:

我们再来去弄一个实现者,这里需要实现一下这两个方法

但是我们先不实现,先这样放着

第三步:

我们定义一个抽象的同事类,也就是客户

当然,光有这个不行,我们需要加点方法

当然,我们这个发送信息需要有中介,所以这里我们将房屋中介也定义进来,给一个set方法

第四步:

创建具体的实现同事类,这里我们就是指定的具体的用户了

我们弄个客户A和客户B

但是你在调用 repay 的时候会报错,这里我们去修改一下我们房屋中介的方法

OK

第五步:

再自己弄个客户B,调用的是和客户A中的代码一样

第六步:

这里我们开始写具体的中介者实现的业务代码了

我们首先需要一个 List 集合去将这些用户存储起来

然后我们开始写具体的业务代码,写之前我们可以看到啊,这个register 方法和 repay 的方法都没有我们的客户对象,这里呢,我们需要再去修改一下抽象中介的方法

接着,我们在 register 中将我们的客户存入到 list 中,并且调用 set 方法,将中介传入到具体的用户实现类中

接着我们再 repay 通知的时候,判断一下是不是当前对象,如果不是,我们就调用它的 receive 方法

测试:

我们先定义好我们的中介,然后定义两个客户,并且注册到这个中介中

然后我们让 a 发送一个 涨价

看一下结果

当然你这里可以作一下区分,比如说 A说:B接收:,这样可以分辨清楚

OK,就到这里,大家好好看一下。多多练习。有问题可以联系我QQ:2100363119

欢迎大家访问我的个人网站:lemon1234.com 感谢大家留言

Java23种设计模式——19.行为型模式之中介者模式相关推荐

  1. java23种设计模式面试常被问到的单利模式讲解

    最近在学习软件工程中的设计模式,学一个总结一个. 方便自己,方便他人. 概念 单例模式指的是一个类只有一个实例对象,且这个类能自行创建这个实例对象的一种模式.比如,我们的Windows 系统只能打开一 ...

  2. 23种设计模式之行为型(下)

    23种设计模式之行为型(下) 责任链模式(Chain of Responsebility ) 命令模式(Command) 备忘录模式(Memento) 解释器模式(Interpreter) 迭代器模式 ...

  3. 走穿java23种设计模式-15责任链模式详解

    走穿java23种设计模式-15责任链模式详解 责任链模式是一种常见的行为模式. 一.责任链模式的现实场景 习伟过生日邀请了很多朋友到KTV一起庆祝,为了增加欢乐的气氛,习伟建议大家一起玩击鼓传花的游 ...

  4. 走穿java23种设计模式--18中介者模式详解

    走穿java23种设计模式–18中介者模式详解 中介者模式也称调停者模式,是一种比较简单的模式. 一.中介者模式的现实场景 蔡良因为上次表白时对方只看重他的物质方面,所以他对女朋友这个问题有点失望.因 ...

  5. 备战面试日记(3.2) - (设计模式.23种设计模式之创建型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.6 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  6. 备战面试日记(3.4) - (设计模式.23种设计模式之行为型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.12 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文 ...

  7. JAVA23种设计模式(2)-结构型模式7种

    JAVA23种设计模式(2)-结构型模式7种 把类结合在一起形成更大的结构 适配器模式(adapter) 一句话:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容 这是平时比较常见的一种模 ...

  8. Java实现二十三种设计模式(五)—— 十一种行为型模式 (中)——解释器模式、迭代器模式、中介者模式、备忘录模式

    Java实现二十三种设计模式(五)-- 十一种行为型模式 (中)--解释器模式.迭代器模式.中介者模式.备忘录模式 一.解释器模式 我国 IT 界历来有一个汉语编程梦,虽然各方对于汉语编程争论不休,甚 ...

  9. JAVA23种设计模式学习,源码+案例分析+类图讲解

    本文对JAVA中23种设计模式进行了简单的讲解,幷加以实际案例进行辅助理解,每种模式都会举例说明,幷将源码开源至gitee和githbu上.JAVA目录下为源码,resources目录下的UML文件夹 ...

最新文章

  1. 一个切割PDF文件的简单的方法 -只需要chrome浏览器
  2. 【C#】using用法
  3. Go语言介绍 安装 基础命令(一)
  4. 【转】工作站和服务器的区别
  5. 谷歌浏览器开发者工具解析
  6. 教你如何保存有妖气漫画
  7. highcharts使用downloadCSV导出数据时间与实际时间不对应
  8. 图形识别和简单的颜色识别
  9. 《Excel高手捷径:一招鲜,吃遍天》一第18招 怎样在Excel中插入方框内打勾符号(√)和方框内打叉符号(×)...
  10. php token过期时间,token过期是什么意思
  11. ie11浏览器For win7 x64 官方下载 V9600 官方版
  12. mac os操作系统安装
  13. tableau app android,tableau 安卓
  14. 2.SQL的CRUD操作
  15. 基于STM32楼梯层控制系统
  16. OGG(ORACLE GOLDENGATE 12.3)安装与学习文档教程
  17. v-chart柱状图点击改变颜色
  18. 【转自Mster HaKu的博文】UML设计初步 - 基本概念一(actor, use case)
  19. 自由职业者要当心如何保护自己免遭身份盗用
  20. 敏捷开发模式 与 TDD 的思考总结

热门文章

  1. vue中使用iview一个数据分成两列渲染(render,竖列,左右不同数据)
  2. 计算机网络期末大题汇总
  3. MySQL事务的四种隔离界别以及会造成的问题和解决办法
  4. 【Verilog基础】CMOS逻辑门实现基础功能(反相器/与非门/或非门/与门/或门)
  5. 情感分析Sentiment Analysis 知识资料全集(入门/进阶/论文/综述/视频/专家,附查看
  6. nacos访问显示404
  7. 【pytorch】深度学习所需算力估算:flops及模型参数量
  8. 写给大家看的PPT设计书
  9. 学习java 程序员技术练级攻略 作者:酷壳
  10. 人脸验证:DeepID(转)