【设计模式】我终于读懂了中介者模式。。。

⚾️智能家庭项目

  1. 1. 智能家庭包括各种设备,闹钟、咖啡机、电视机、窗帘 等

  2. 2. 主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为:闹铃响起->咖啡机开始做咖啡->窗帘自动落下->电视机开始播放

⚾️传统方案解决智能家庭管理问题

【设计模式】我终于读懂了中介者模式。。。

⚾️传统的方式的问题分析

  1. 1. 当各电器对象有多种状态改变时,相互之间的调用关系会比较复杂

  2. 2. 各个电器对象彼此联系,你中有我,我中有你,不利于松耦合.

  3. 3. 各个电器对象之间所传递的消息(参数),容易混乱

  4. 4. 当系统增加一个新的电器对象时,或者执行流程改变时,代码的可维护性、扩展性都不理想 考虑中介者模式

⚾️中介者模式基本介绍

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

  2. 2. 中介者模式属于行为型模式,使代码易于维护

  3. 3. 比如 MVC 模式,C(Controller 控制器)是 M(Model 模型)和 V(View 视图)的中介者,在前后端交互时起到了中间人的作用

    ⚾️中介者模式的原理类图

    【设计模式】我终于读懂了中介者模式。。。

    ⚾️对原理类图的说明-即(中介者模式的角色及职责)

  4. 4. Mediator 就是抽象中介者,定义了家居到中介者对象的接口

  5. 5. Colleague 是抽象家居(拥有共同方法的类)类

  6. 6. ConcreteMediator 具体的中介者对象, 实现抽象方法, 他需要知道所有的具体的家居类,即以一个集合来管理 HashMap,并接受某个家居对象消息,完成相应的任务

  7. 7. ConcreteColleague 具体的家居类,会有很多, 每个家居只知道自己的行为, 而不了解其他家居类的行为(方法), 但是他们都依赖中介者对象

    ⚾️中介者模式应用实例-智能家庭管理

    ⚾️应用实例要求

    完成前面的智能家庭的项目,使用中介者模式

⚾️思路分析和图解(类图)

【设计模式】我终于读懂了中介者模式。。。

⚾️代码实现

Colleague类,同事抽象类,包含中介者

【设计模式】我终于读懂了中介者模式。。。

四个子类

【设计模式】我终于读懂了中介者模式。。。

Alarm类

【设计模式】我终于读懂了中介者模式。。。

CoffeeMachine类

【设计模式】我终于读懂了中介者模式。。。

Curtains类

【设计模式】我终于读懂了中介者模式。。。

TV类

【设计模式】我终于读懂了中介者模式。。。

ConcreteMediator类

具体的中介者,具体事件由中介者控制,colleagueMap存储所有同事类

【设计模式】我终于读懂了中介者模式。。。

客户端类

【设计模式】我终于读懂了中介者模式。。。

⚾️debug看原理

  1. 1. 创建Alarm

【设计模式】我终于读懂了中介者模式。。。
  1. 1. 加入到 ConcreteMediator 对象的HashMap

【设计模式】我终于读懂了中介者模式。。。
【设计模式】我终于读懂了中介者模式。。。
  1. 1. 其他的三个同事类是一样的

【设计模式】我终于读懂了中介者模式。。。

4. 现在中介者已经接管了四个同事类了

【设计模式】我终于读懂了中介者模式。。。

5. 现在进行我们的需求:闹铃响起->咖啡机开始做咖啡->窗帘自动落下->电视机开始播放

【设计模式】我终于读懂了中介者模式。。。
【设计模式】我终于读懂了中介者模式。。。

6. 调用中介方法

【设计模式】我终于读懂了中介者模式。。。

7. 开始咖啡制作

【设计模式】我终于读懂了中介者模式。。。
【设计模式】我终于读懂了中介者模式。。。

8. 咖啡制作完成

【设计模式】我终于读懂了中介者模式。。。
【设计模式】我终于读懂了中介者模式。。。

9. 发送中介者信息

【设计模式】我终于读懂了中介者模式。。。

10. 拉上窗帘

【设计模式】我终于读懂了中介者模式。。。
【设计模式】我终于读懂了中介者模式。。。

11. 发送信息给中介者

【设计模式】我终于读懂了中介者模式。。。

12. 开启电视

【设计模式】我终于读懂了中介者模式。。。
【设计模式】我终于读懂了中介者模式。。。

13. 闹钟再次想起

【设计模式】我终于读懂了中介者模式。。。

14. 关上电视

【设计模式】我终于读懂了中介者模式。。。
【设计模式】我终于读懂了中介者模式。。。
【设计模式】我终于读懂了中介者模式。。。

至此流程走完,每个同事类都没有去调用其他同事类的方法,所有操作都是中介帮忙完成的

⚾️中介者模式在JDK中的运用

  1. 1. jdk中的Timer类就是使用了中介者模式 Timer是Java提供的原生Scheduler(任务调度)工具类,用来在一个后台线程计划执行指定任务。

  2. 2. 源码解析

    【设计模式】我终于读懂了中介者模式。。。

    有很多的schedule重载方法都调用了sched

    【设计模式】我终于读懂了中介者模式。。。
    【设计模式】我终于读懂了中介者模式。。。

sched方法使用了TaskQueue来存储task,并调用他们的方法

【设计模式】我终于读懂了中介者模式。。。

所以timer类就类似于中介者的身份

⚾️中介者模式的注意事项和细节

  1. 1. 多个类相互耦合,会形成网状结构, 使用中介者模式将网状结构分离为星型结构,进行解耦

  2. 2. 减少类间依赖,降低了耦合,符合迪米特原则

  3. 3. 中介者承担了较多的责任,一旦中介者出现了问题,整个系统就会受到影响

  4. 4. 如果设计不当,中介者对象本身变得过于复杂,这点在实际使用时,要特别注意

总之,通过本文的讲解,相信大家对中介者模式已经有了更深入的理解。中介者模式虽然需要多个对象进行协作,但也因此实现了对象之间的解耦,将复杂性变得更为容易维护和扩展。在开发中,我们可以运用中介者模式来优化代码功能,提高代码可读性、可扩展性和可维护性。如果你在设计中遇到了问题,可以考虑是否使用中介者模式来简化你的程序逻辑。

最后,希望本篇文章能够帮助到各位开发人员,更好地理解并运用中介者模式,提高自己的开发水平和能力。

资料参考:https://www.bilibili.com/video/BV1G4411c7N4

代码地址:https://gitee.com/WangFuGui-Ma/design-pattern/tree/master/design


【设计模式】我终于读懂了中介者模式。。。

另外如果对Elastic Search感兴趣的话,推荐一下我的专栏,这篇专栏介绍了Elasticsearch的Restful API的入门指南。学习如何使用API进行索引、搜索和分析,包括创建索引、定义映射、添加文档、执行查询等。通过实例和代码片段,快速上手Elasticsearch的Restful API,构建强大的搜索功能。感谢大家支持:

Elastic Search的RestFul API入门 [1]

【设计模式】我终于读懂了中介者模式。。。

引用链接

[1] Elastic Search的RestFul API入门 : https://blog.csdn.net/csdnerm/category_12497418.html


原文始发于微信公众号(掉头发的王富贵):【设计模式】我终于读懂了中介者模式。。。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/297258.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!