CH07_简单化

Facade 模式

外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一个系统更加容易使用。

类图

在这里插入图片描述

说明

  • Facade(窗口)

    Facade角色是代表构成系统的许多其他角色”简单窗口“。Facade角色向系统外部提供高层接口(API)。

  • 构成系统的许多其他角色

    这些接口各自完成自己的工作,它们并不知道Facade角色。Facade角色调用其他角色进行工作,但是其他角色不会调用Facade角色。

  • Client(请求者)

    Client角色负责调用Facade角色(Client角色不包含在Facade模式中)

何时使用

首先,在设计初期阶段,应该要有意识的将不同的两个层分离,比如经典的三层架构。在层与层之间建立外观Facade,为复杂的子系统提供一个简单的接口。

其次,在开发阶段,子系统往往因为不断的重构演化变得越来越复杂,这时增加外观Facade可以提供一个简单的接口,减少客户程序与子系统中各种类之间的依赖。

最后,在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,但因为它包含非常重要的功能,新的需求开发必须要依赖它。可以为新系统开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。

Mediator 模式

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

类图

在这里插入图片描述

说明

  • Mediator(中介者,仲裁者)

    Mediator角色负责定义与Colleague角色进行通信和做出决定的接口(API)。

  • ConcreteMediator(具体的中介者、仲裁者)

    ConcreteMediator角色负责实现Mediator角色的接口(API),负责实际做出决定。

  • Colleague(同事)

    Colleague角色负责定义与Mediator角色进行通信的接口(API)。

  • ConcreteColleague(具体的同事)

    ConcreteColleague角色负责实现Colleague角色的接口(API)

何时使用

中介者模式很容易在系统中应用,也很容易在系统中吴用。当系统出现‘多对多’交互复杂的对象群时,不要急于使用中介者模式,而是反思系统上设计是不是合理。

优点:Mediator的出现减少了各个Colleague的耦合,使得可以独立的该变和复用各个Colleague类和Mediator。由于把对象如何协作进行了抽象,将中介作为一个独立的概念并封装在一个对象中,这样关注的对象就从对象各自本身的行为转移到它们之间的交互上来,也就是站在一个更宏观的角度去看待系统。

缺点:由于ConcreteMediator控制集中化,于是就把交互复杂性变为了中介者的复杂性,这就使得中介者会变得比任何一个ConcreteColleague都复杂。

中介者模式一般应用于一组对象以定义良好但是复杂的方式进行通信的场合,以及想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【用unity实现100个游戏之19】制作一个3D传送门游戏,实现类似鬼打墙,迷宫,镜子,任意门效果

最终效果 文章目录 最终效果素材第一人称人物移动开门效果显示原理渲染相机跟着我们视角移动门的摄像机跟着我们旋转近裁剪面设置传送配置代码实现传送效果结束完结素材 https://assetstore.unity.com/packages/3d/props/interior/door-free-pack-aferar-148411

andriod安卓水果商城系统课设

​ 一、目的及任务要求 随着当今社会经济的快速发展和网络的迅速普及,手机基本成为了每个人都随身携带的电子产品。传统的购物方式已经满足不了现代人日益追求便利及高效率的购物心理,而通过移动手机上的在线购物系统,可以便捷地甚至足不出…

XV7011BB陀螺传感仪的规格书

角速率输出(16/24bit)优异的温度偏置稳定性工作温度范围-20℃至80℃(可选:-40℃至85℃) 角速率输出(16/24bit)优异的温度偏置稳定性工作温度范围-20℃至80℃(可选:-40℃至85℃)内置温度传感器内置可选数字滤波器低功耗视频:XV7000系列,用于…

使用aspose.Words更新表格列宽

public static bool UpdateTableStyle(string filePath) { try { Document doc new Document(); //样式 Style style doc.Styles.Add(StyleType.Paragraph, "cellStyle"); style.Font.Name "simsun"; PageSetup pageSet doc.Sections[0].PageSetup; pa…

scss是什么?安装使用的步骤是?有哪几大特性?

SCSS是一种层叠样式表语言的扩展,它引入了变量、嵌套规则、混合、继承等功能,使得样式表的编写更加简洁、有组织和可维护。 安装SCSS的步骤如下: 首先,你需要安装Node.js环境。可以从Node.js官网下载并按照指引进行安装。 安装完…

java面试题18

什么是Java中的数据库连接池(Database Connection Pool)?它有什么作用? 答案:数据库连接池是一种管理和重用数据库连接的机制,用于提高数据库访问的性能和可扩展性。Java中的数据库连接池可以通过使用开源的…

全面解析 I2C 通信协议

全面解析 I2C 通信协议 lvy 嵌入式学习规划 2023-12-22 21:20 发表于陕西 嵌入式学习规划 嵌入式软件、C语言、ARM、Linux、内核、驱动、操作系统 80篇原创内容 公众号 点击左上方蓝色“嵌入式学习规划”,选择“设为星标” 1、什么是I2C协议 I2C 协议是一个允许…

【2023年12月18日-12月25日】一周AI咨询更新

上周,关于Google的Bard和Midjourney v6的讨论异常火热。 接下来,让我们回顾一下上周那些引人注目的AI新闻。 ① 已近乎真实拍摄:Midjourney v6的画质令人惊叹 由Midjourney v6制作的图片,质量之高,媲美电影级别&…

C语言中的Do While循环:深度解析与实践应用

各位少年, 在C语言编程中,循环语句是实现重复任务的关键构造块。今天,我们将深入探讨C语言中的一种特殊循环结构——Do While循环。 一、理解Do While循环 Do While循环是一种后测试循环,这意味着它首先执行循环体内的语句&…

关于使用Selenium获取网页控制台的数据

背景: 需要获取网页的控制台的数据,如下图 在此文章将使用到 Pycharm 和 Selenium4 Pycharm安装 Selenium安装 from selenium import webdriver from selenium.webdriver.common.by import By import time# 创建浏览器对象 browser webdriver.Chro…

二叉树-遍历-重写

文章目录 是否可以通过遍历一遍二叉树得到答案寻找任意一个节点与f(T)的关系需要判断哪些是1!2视频页面强化训练01 257. 二叉树的所有路径02 129. 求根节点到叶节点数字之和03 199. 二叉树的右视图04 298. 二叉树最长连续序列🔒05 988. 从叶结点开始的最小字符串*06…

【Recruitment Mercedes Benz】

Network I) JDII) IPv4与IPv6之间的区别是什么III) was advices3.1) 防火墙,配置,数据的in/out (data flow in or flow out)3.2) 域名,网址,端口3.3) 三次握手,四次挥手3.4) TCP/IP, 几层协议&a…

Ubuntu 22.04 安装ftp实现与windows文件互传

Ubuntu 22.04 安装ftp实现与windows文件互传 1、配置安装 安装: sudo apt install vsftpd -y使能开机自启: sudo systemctl enable vsftpd 启动: sudo systemctl start vsftpd创建ftp工作目录: sudo mkdir -p /home/ftp/uftp…

PHP的Laravel的数据库迁移

1.默认迁移文件 2.数据库迁移 在终端输入以下代码 php artisan migrate 我的报错啦!!!!! 数据库里面只有两张表,实际上应该有四张的!!! 解决方法: 反正表已…

企业如何正确的云迁移,云迁移过程中需要注意哪几个点?

如今的企业比以往任何时候都能访问更多的数据。这些数据正在以惊人的速度增长,无论是数量还是变化量。无论是传统的分析还是机器学习和人工智能等前沿技术,将这些信息从所有信息源集中到云存储库对业务至关重要。 为什么进行迁移? 企业将数…

项目接口性能优化方案

🧑‍💻作者名称:DaenCode 🎤作者简介:CSDN实力新星,后端开发两年经验,曾担任甲方技术代表。会点点Java相关技术栈、帆软报表、低代码平台快速开发。技术尚浅,闭关学习中 &#x1f60…

模拟算法 蓝桥杯备赛系列 acwing

文章目录: 基础知识 什么是模拟? 例题 一、错误票据 1.解题思路 2.代码 二、移动距离 1.解题思路 2.代码 三、航班时间 1.解题思路 2.代码 四、外卖优先级 1.解题思路 2.代码 前面为了目录好看大家就当个玩笑看吧哈哈哈。下面上正文。 正文 基础知识 什…

LeetCode刷题---合并区间

解题思路: 一次遍历,首先按照每个元素区间的start来排序,之后定义一个列表将第一个元素添加进去,依次遍历数组的每个元素,如果第二个元素区间的start小于或者等于第一个元素区间的end,则证明两个区间是重叠…

第27关 在K8s集群上使用Helm3部署最新版本v2.10.0的私有镜像仓库Harbor

------> 课程视频同步分享在今日头条和B站 大家好,我是博哥爱运维。 在前面的几十关里面,博哥在k8s上部署服务一直都是用的docker hub上的公有镜像,对于企业服务来说,有些我们是不想把服务镜像放在公网上面的; 同时…

Jmeter接口工具大全使用—响应断言

断言的作用:一个HTTP请求发出去,怎么判断执行的任务是否成功呢?通过检查服务器响应数据,是否返回预期想要的数据,如果是,判断任务成功,反之任务失败。 1.添加断言 选中一个取样器,…