IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 从零开始学习Java设计模式 | 行为型模式篇:中介者模式 -> 正文阅读

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

在本讲,我们来学习一下行为型模式里面的第七个设计模式,即中介者模式。

概述

在学习中介者模式之前,我们先来看下面这段描述。

一般来说,同事类之间的关系是比较复杂的(其实,这儿所说的同事类就是中介者模式里面的一个角色,而在这里,你可以先把它当作一个普通的类来看待),多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,既不利于类的复用,也不稳定。例如,下图中有六个同事类对象,假如对象1发生变化,那么将会有4个对象受到影响,因为对象1所属类和对象2、对象4、对象5、对象6所属类之间是有关联关系的。如果对象2发生变化,那么将会有5个对象受到影响。所以,这种错综复杂的关系会让我们在后期维护起来特别特别麻烦,也就是说,同事类之间直接关联的设计是不好的。

在这里插入图片描述

那么我们应该如何来改进呢?这时不妨使用一下中介者模式,因为使用中介者模式的话,可以使得同事类之间的关系成为星型的结构,也就是我们下图右侧所展示出来的星型结构。

在这里插入图片描述

从上图右侧部分可以看到,每一个同事类,它只和中介者进行一个相互关联,而它们相互之间是不需要进行任何关联的,这样,任何一个类的变动,只会影响到类本身以及中介者,也就是说,对象1所属类里面的业务逻辑发生变化了的话,那么对象1所属类以及中介者要发生一个改变,而对于其他对象的所属类则是不需要进行改动的,这样就减小了系统的耦合。

一个好的设计,必定不会把所有的对象关系处理逻辑封装在本类中,而是使用一个专门的类来管理那些不属于自己的行为,这个专门的类就是中介者。

下面我再举一个例子让大家好好理解一下。

如果我们攒够首付了,想要去买一套属于自己的房子,那么我们应该怎么办呢?我们作为一个购房者,是不会直接去找对应的房主的,因为房主有很多,我们找起来会非常麻烦,一个一个房主去找,会累坏我们,正确的做法就是去找房屋中介。对于房主而言,他只需要把自己房子的信息交给中介进行管理即可,而对于购房者来说,他只需要去找对应的房屋中介就行,房屋中介会根据他的需求去找对应的房主协商,并给购房者一些比较不错的建议。

在这里插入图片描述

如果此时购房者的需求发生了变化,那么他并不需要把他的需求告知给所有的房主,而只需要告知给房屋中介即可,房屋中介会根据他的需求帮他去选择合适的房子,这就是中介者模式。

那什么是中介者模式呢?下面我们来看一下它的概念。

中介者模式又叫调停模式,它定义了一个中介角色来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。

上述中介者模式的概念,大家看着可能挺懵的,这没关系,下面我给大家稍微解释一下。

就拿上述购房者买房的案例来说,房屋中介就是中介者角色,它封装了房主以及购房者之间的交互关系,这样就会使得房主和购房者之间的耦合变得松散,要是没有房屋中介的话,购房者买房就只能去找房主了,一旦看的房子他不满意,他还需要再去找另外一个房主,还不满意的话,还得继续去找其他房主,那么这就非常耗时、耗资源了。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-01 16:41:08  更:2021-10-01 16:41:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:03:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码