码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 设计模式之中介者模式


    文章目录

    • 智能家庭项目
    • 传统方案解决智能家庭管理问题
    • 中介者模式基本介绍
    • 中介者模式的原理类图
    • 中介者模式应用实例-智能家庭管理
    • 中介者模式的注意事项和细节

    智能家庭项目

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

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

    1. 当各电器对象有多种状态改变时,相互之间的调用关系会比较复杂
    2. 各个电器对象彼此联系,你中有我,我中有你,不利于松耦合.
    3. 各个电器对象之间所传递的消息(参数),容易混乱
    4. 当系统增加一个新的电器对象时,或者执行流程改变时,代码的可维护性、扩展性都不理想 考虑中介者模式

    中介者模式基本介绍

    1. 中介者模式(Mediator Pattern),用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互
    2. 中介者模式属于行为型模式,使代码易于维护
    3. 比如 MVC 模式,C(Controller 控制器)是 M(Model 模型)和 V(View 视图)的中介者,在前后端交互时起到了中间人的作用

    中介者模式的原理类图

    在这里插入图片描述

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

    1. Mediator 就是抽象中介者,定义了同事对象到中介者对象的接口
    2. Colleague 是抽象同事类
    3. ConcreteMediator 具体的中介者对象, 实现抽象方法, 他需要知道所有的具体的同事类,即以一个集合来管理HashMap,并接受某个同事对象消息,完成相应的任务
    4. ConcreteColleague 具体的同事类,会有很多, 每个同事只知道自己的行为, 而不了解其他同事类的行为(方法),但 是他们都依赖中介者对象

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

    1. 应用实例要求
      完成前面的智能家庭的项目,使用中介者模式

    2. 思路分析和图解(类图)

    在这里插入图片描述

    1. 代码实现

    https://gitee.com/luan_hao/design-pattern/tree/master/src/main/java/com/lh/mediator

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

    1. 多个类相互耦合,会形成网状结构, 使用中介者模式将网状结构分离为星型结构,进行解耦
    2. 减少类间依赖,降低了耦合,符合迪米特原则
    3. 中介者承担了较多的责任,一旦中介者出现了问题,整个系统就会受到影响
    4. 如果设计不当,中介者对象本身变得过于复杂,这点在实际使用时,要特别注意
  • 相关阅读:
    曼哈顿距离和切比雪夫距离的转换
    Vue2高级-scoped样式、组件自定义事件
    电容笔和Apple pencil的区别有什么?值得入手的电容笔排行
    网页制作基础大二dw作业HTML+CSS+JavaScript云南我的家乡旅游景点
    基础知识集合
    为华生物Dextran-SH 葡聚糖巯基 巯基化葡聚糖的简介及应用说明
    Ansible FIle模块,使用Ansible File模块进行文件管理
    【spring】bean的生命周期
    利用非递归遍历统计二叉树的结点数
    Python智能驱动数学模型和泰勒级数-贝塞尔曲线模拟微观交通
  • 原文地址:https://blog.csdn.net/weixin_45417821/article/details/133245459
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号