文章目录

  • 一、中介者模式简介
  • 二、中介者模式适用场景
  • 三、中介者模式优缺点
  • 四、中介者模式 与 观察者模式
  • 五、中介者模式 代码示例
    • 1、聊天室
    • 2、用户
    • 3、运行实例

一、中介者模式简介


中介者模式 : 定义 一个 封装一组对象 如何 交互 的 对象 ;

通过使 对象 明确地 相互引用 , 促进 松散耦合 , 允许 独立改变 它们之间的 交互 ;

中介者模式类型 : 行为型 ;

二、中介者模式适用场景


中介者模式适用场景 :

  • 引用关系复杂 : 系统中 对象之间 存在 复杂的 引用关系 , 产生的 相互依赖关系 结构混乱 , 难以理解 ;
  • 改变行为 : 交互的 公共行为 , 如果 需要 改变行为 , 可以 增加新的 中介者 类 ; ( 通过增加新的中介者类 , 达到扩展的目的 )

多人聊天室 就是一个 中介者模式 场景 , 一个人发言时 , 需要传达给每个人 , 如果没有聊天室 , 需要对每个人都说一遍 , 如果有中介者 , 就由中介者负责将发言传达给每个人 ;

三、中介者模式优缺点


中介者模式优点 :

  • 降低复杂度 : 将 一对多 转化为 一对一 , 降低了 程序复杂程度 ;
    如 : 聊天室中有 888 个人 , 如果要一对一进行交互 , 需要交互 777 次 ; 使用了中介者模式后 , 变成一对一 , 只要将交互内容交给中介者就可以了 , 中介者负责与其余 777 人进行交互 ;

  • 解耦 : 实现了 类之间的解耦 操作 ;
    如 : 聊天室中有 888 个人 , 每个人都需要耦合另外 777 个 , 即持有另外 777 个对象 , 使用了中介者模式之后 , 888 个人只需要持有 中介者 对象即可 , 888 个人之间不再进行相互耦合 ;

中介者模式缺点 : 如果在 业务场景 中 中介者 数量过多 , 会导致系统 复杂性增加 ;
( 设计模式之间 , 也是一个相互平衡的过程 )

四、中介者模式 与 观察者模式


中介者模式 与 观察者模式 :

这两个模式经常 结合起来使用 , 使用 观察者模式 实现 中介者模式 中 , 角色间的通信 ;

五、中介者模式 代码示例


业务场景 : 聊天室 , 多人在聊天室中聊天 ;

聊天室 实例 只有一个 , 用户可以创建多个 , 并持有 聊天室 引用 ;

1、聊天室

package mediator;/*** 聊天室 , 中介者模式中的中介者*      该类实例在整个业务场景中只有一个*/
public class ChatRoom {public static void showMessage(User user, String message){System.out.println(user.getName() + " : " + message);}
}

2、用户

package mediator;/*** 中介者模式中 与 中介者 交互的对象*      该类实例对象 , 需要创建多个*/
public class User {private String name;public User(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}/*** 主要业务逻辑 , 群聊时发送消息* @param message*/public void sendMessage(String message) {ChatRoom.showMessage(this, message);}
}

3、运行实例

package mediator;public class Main {public static void main(String[] args) {User tom = new User("Tom");User jerry = new User("Jerry");User trump = new User("Trump");tom.sendMessage("I'm cat");jerry.sendMessage("I'm mouse");trump.sendMessage("MAGA");}
}

【设计模式】中介者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )相关推荐

  1. 【设计模式】模板方法模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.模板方法模式简介 二.模板方法模式适用场景 三.模板方法模式优缺点 四.模板方法扩展 五.模板方法模式相关设计模式 六.模板方法模式代码示例 1.模板方法抽象类 2.模板方法实现类 1 ...

  2. 【设计模式】策略模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.策略模式简介 二.策略模式适用场景 三.策略模式优缺点 四.策略模式与其它设计模式 五.策略模式代码示例 1.促销策略接口 2.满减促销策略 3.返现促销策略 4.空促销策略 5.促销策 ...

  3. 【设计模式】状态模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.状态模式简介 二.状态模式适用场景 三.状态模式优缺点 四.状态模式相关设计模式 五.状态模式代码示例 1.状态类父类 2.播放状态类 3.暂停状态类 4.快进状态类 5.停止状态类 6 ...

  4. 【设计模式】访问者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.访问者模式简介 二.访问者模式 适用场景 三.访问者模式 优缺点 四.访问者模式 与 迭代器模式 五.代码示例 1.Game 父类 ( 被访问者 ) 2.VipGame 收费游戏 ( 被 ...

  5. 【设计模式】桥接模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.桥接模式简介 二.桥接模式适用场景 三.桥接模式优缺点 四.桥接模式相关设计模式 五.桥接模式代码示例 1.视频格式抽象 2.FLV 视频格式实现 3.MP4 视频格式实现 4.系统平台 ...

  6. 【设计模式】解释器模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.解释器模式简介 二.解释器模式适用场景 三.解释器模式优缺点 四.解释器模式与适配器模式 五.解释器模式代码示例 1.解释器接口 2.加法解释器 3.乘法解释器 4.整型解释器 5.语法 ...

  7. 【设计模式】建造者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.建造者模式简介 二.建造者模式适用场景 三.建造者模式优缺点 四.建造者模式与工厂模式 五.建造者模式代码示例 1.学生类 2.建造者抽象类 3.建造者实现类 4.教师类 ( 非必须 ) ...

  8. 【设计模式】组合模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.组合模式简介 二.组合模式适用场景 三.组合模式优缺点 四.组合模式和访问者模式 五.组合模式代码示例 1.书籍和目录的抽象父类 2.书籍类 3.目录类 4.测试类 一.组合模式简介 组 ...

  9. 【设计模式】迭代器模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.迭代器模式简介 二.迭代器模式适用场景 三.迭代器模式优缺点 四.迭代器模式和访问者模式 五.迭代器模式代码示例 1.迭代器接口 2.迭代器实现 3.集合元素实例类 4.集合管理接口 5 ...

最新文章

  1. 2017年安全漏洞审查报告:安全补丁在不断增加,用户却不安装
  2. RDKit:化合物相似性搜索(基于Python3)
  3. is not allowed to connect to this MySQL server解决办法
  4. Hyperopt中文文档:Cite引用
  5. python中执行sql语句_Python执行sql语句
  6. 应该怎么做一个登录功能?
  7. linux差分包升级流程,OTA 差分升级包的制作
  8. oracle监听管理工具,oracle监听器管理
  9. FTP服务学习笔记之FTP简介(1)
  10. 最短路算法floyd
  11. 4.SOA架构:服务和微服务分析及设计--- Web服务及微服务的分析与建模
  12. java.lang.NoSuchFieldError: INSTANCE at org.apache.http.conn.ssl.SSLConnectionSocketFactory
  13. SWF怎么转换AVI视频格式呢?
  14. 基因组所三代单分子测序PacBio完成技术升级—超长读长助力基因组学研究
  15. 姜小白的python日记Day3 初识模块与数据运算
  16. 关于STM32串口波特率的产生,以及USARTDIV写入到USART_BRR寄存器的值
  17. AI首席架构师6-AICA-从数据到知识-百度知识图谱技术及应用
  18. 用HTML语言编写 蓝色字体,背景色为蓝色,字体为红色的代码 怎么用HTML的形式表示?...
  19. OpenCL最小线程并行粒度
  20. 思科无线AP (AIR-AP1832I-K9)瘦ap 刷 胖ap

热门文章

  1. 【转】电驴提示“该内容尚未提供权利证明,无法提供下载”之解决办法详解...
  2. Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(10)...
  3. 发布Apworks应用开发框架(Alpha版本)
  4. python之迭代锁与信号量
  5. Map集合的几种遍历方式
  6. YTU 2917: Shape系列-3
  7. expdp\impdp及exp\imp
  8. hibernate里的generator中class =value介绍
  9. hook 驱动 截屏
  10. VS 2010 Beta2中WPF与Silverlight的关键区别?