设计模式 -- 门面模式

news/2024/4/23 18:44:52/

前言

月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂)

央是一片海洋,海乃百川,代表着一块海绵(吸纳万物)

泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出)

月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容

希望大家一起坚持这个过程,也同样希望大家最终都能从零到零,把知识从薄变厚,再由厚变薄!

一、什么是门面模式?

        门面模式,是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用

二、门面模式的优缺点

优点:

  1. 简化接口:门面模式提供了一个简单的接口来访问子系统,从而减少了客户端与子系统之间的复杂性。

  2. 解耦系统:门面模式将客户端与子系统解耦,从而使得子系统的修改不会影响到客户端。

  3. 提高安全性:门面模式可以限制客户端对子系统的直接访问,从而提高了安全性。

  4. 提高可维护性:门面模式将系统的复杂性隐藏在门面后面,从而使得系统更容易维护和修改。

缺点:

  1. 过度使用门面模式可能会导致代码变得复杂和难以维护。

  2. 门面模式可能会使代码过度耦合,因为所有客户端代码都需要通过门面进行访问。

  3. 门面模式可能会导致性能问题,因为每次调用门面都需要执行一些额外的代码来处理请求。

  4. 如果门面过于复杂,可能会导致代码重复和冗余。

  5. 门面模式可能会限制系统的扩展性,因为所有客户端代码都需要通过门面进行访问,而不能直接访问底层组件

三、门面模式的结构:

四、门面模式实战

        以上面结构图为例,当我们需要在家做饭的时候 ,需要买菜,洗菜,做饭,洗盘子这么多流程,而且这些流程还会有一定的顺序,这个时候如果有一个门面,我需要吃的时候直接吃就好了,不用考虑那么多步骤以及这些步骤之间的顺序,因此,这个时候餐厅就出来了,门面模式诞生了,你只需要去餐厅吃饭即可,其他都有餐厅来做了.

1.创建步骤流程(买菜->洗菜->做饭->洗盘子)

 

 

 

 2.创建门面餐厅类

 3.顾客来访:

4.测试结果

五.总结

        门面模式是一种结构型的设计模式,包括我们自己使用很多第三方的jar包,其实就是一种门面模式的具体使用,不需要考虑细节,我们只需要尽情调用即可,当然为了提升自己,还是建议小伙伴们多去看下底层代码,说不定会对自己未来某块业务上有帮助.


http://www.ppmy.cn/news/46846.html

相关文章

100种思维模型之非共识思维模型-48

某一件事或者某一个环境当中,绝大多数人往右走,而你 发现真正的路是左边 的时候,该怎么选择? 往左边走,做非共识但正确的事,因为一旦你的真的是对的,你将会得到一切。 非共识思维模型是一个提…

集群和分布式

本文以即时通讯软件(IM)为例,介绍单机、集群、分布式的区别,以及它们各自的优缺点。 假设现在开发一款IM,刚开始业务比较简单,用户量也较少,我们将服务部署在一台单机服务器上足矣。软件开发过程…

std::regex正则表达式

std::match_results (匹配的结果存入其中) result[0]是完整的文本,result[1]是第一个分组匹配的数据。如果正则表达式有n个分组,match_results的size也就是n1个 This is a specialized allocator-aware container. It can only …

【FPGA实验4】举重比赛机制

举重比赛有三名裁判,当运动员将杠铃举起后,须有两名或两名以上裁判认可,方可判定试举成功,若用A、B、C分别代表三名裁判的意见输入,同意为1,否定为0;F为裁判结果输出,试举成功时F1,试…

逍遥自在学C语言 | 位运算符~的高级用法

前言 在上一篇文章中,我们介绍了^运算符的高级用法,本篇文章,我们将介绍~ 运算符的一些高级用法。 一、人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。 第二位上场的是和我们一起学习的小白程序猿 ——…

Direct3D 12——计算着色器——计算着色器概念

计算着色器虽然是一种可编程的着色器,但Direct3D并没有将它直接归为渲染流水线中的一部分。虽然如此,但位于流水线之外的计算着色器却可以读写GPU资源。从本质上来说,计算着 色器能够使我们访问GPU来实现数据并行算法,而不必渲染出…

5.Spring Cloud (Hoxton.SR8) 实战笔记—项目中细节实现 约束 注意事项、模块难点总结

本文目录如下: 二、项目中细节实现 & 约束 & 注意事项判断字符串是否为空?入参 Num 字段转换为 num 的问题?通过 Java 获取时间 (Date类型) 并插入数据库?神坑: baseMapper.selectById(String str)之坑?AES 实现加密函数…

[Eigen中文文档] 切片和索引

专栏总目录 本文目录 概述基本的切片编译时的大小和步长倒序索引序列自定义索引列表 英文原文(Slicing and Indexing) 本文介绍了如何使用操作运算符operator()索引行和列的子集。该 API 在 Eigen 3.4 中引入。它支持 block API 提供的所有功能。特别是,它支持切片…

查询练习:条件加组筛选

查询 student 表中至少有 2 名男生的 class 。 -- 查看学生表信息 SELECT * FROM student; ---------------------------------------- | no | name | sex | birthday | class | ---------------------------------------- | 101 | 曾华 | 男 | 1977-09-01 | 95…

vue 动态组件

一见如故 // 一般配合<keep-alive>组件&#xff0c;避免反复重新渲染dom <keep-alive><component :is"com"></component> </keep-alive> <script> import Left from ./LeftComponent.vue import Right from ./RightComponent.v…

Ae:自动定向

Ae 菜单&#xff1a;图层/变换/自动定向 Auto-Orient 快捷键&#xff1a;Ctrl Alt O 自动定向 Auto-Orient是 Ae 图层中的一个附加的、隐藏实现&#xff08;不会在时间轴面板上更改属性的值&#xff09;的功能&#xff0c;它可以使得图层自动旋转或改变方向以朝向指定的运动路…

【Linux阅读笔记】LinuxC一站式编程1-程序基本概念与gdb调试

目录 程序基本概念配置开发环境第一个程序C 复习 gdb单步执行与跟踪断点观察点段错误 程序基本概念 使用 ubuntu22.0 作为演示环境&#xff08;vmware 虚拟机搭设&#xff09; 配置开发环境 配置完基础开发环境后&#xff0c;可以直接下载一个 vscode 作为初始 LDE 使用&#x…

机器学习 day03(成本函数,简化后的和一般情况下的成本函数)

1. 成本函数 平方误差成本函数是最通常用于线性回归的成本函数最终&#xff0c;我们要找到一组w和b&#xff0c;让j函数的值最小误差&#xff1a;ŷ - y 2. 简化后的平方误差成本函数&#xff0c;即b 0 当w 1时&#xff0c;f(x) x&#xff0c;J(1) 0 左侧为f(x)函数&am…

Python 图像处理实用指南:11~12

原文&#xff1a;Hands-On Image Processing with Python 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 计算机视觉 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 当别人说你没有底线的时候&#xff0c;…

程序员 如何避免职场危机,打造自己稀缺性

你在职场上如何又脱颖而出 你唯一的办法就干嘛 找一找怎么才能构建我自己的稀缺性 我经过我 多年的工作和有观察的体验 化是什么呢 从技术迭代进步的角度来说 因为软件越来a p i化 个人的能力被解脱了 一定会向上下有延伸 因为当你做一块 以前是一年做下来时间只需要一个月 是一…

(一)Linux:自由、开放、灵活的操作系统内核

目录 一、Linux的发展史 二、linux的开源 三、目前的现状 四、企业应用现状 五、发行的版本 六、安装与使用 七、利用云服务器配置Linux环境 一、Linux的发展史 Linux是一款由林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;开发的操作系统内核&#xff0c;它的发布…

windows开启自启动jar包

1.新建txt文本文档 2.复制以下内容&#xff0c;并记得修改 appName 到自己jar包所在目录 并修改jar包名称 3.重命名文本文档.txt为 &#xff08;自己起名字&#xff09;.bat (注&#xff1a;修改成.bat文件&#xff0c;名字自己起) echo off setlocal set appNameD:/tes…

Qt QList 详解:从底层原理到高级用法

目录标题 引言&#xff1a;QList 的重要性与应用场景&#xff08;Introduction: The Importance and Application Scenarios of QList&#xff09;QList的常用接口QList和std::listQList 使用场合迭代器&#xff1a;遍历 QList 中的元素&#xff08;Iterators: Traversing Elem…

在新电脑上重启自己的django+vue项目遇到的数据库和Nodejs问题

数据库问题 今天在新电脑上重启自己备份的项目文件,迁移数据库的时候一直出现这个问题,运行代码也是这个问题。很奇怪,明明是不出错的代码做的备份怎么会出问题? 找了一下午,终于晚上把问题解决了。 问题 1、首先是这个问题 2、再往上追溯,发现是这里的问题 3、在原…

【记录】Truenas Scale|中危漏洞,需要SMB签名

部分内容参考&#xff1a;等保测试问题——需要SMB签名(SMB Signing not Required) 以及 ChatGPT。 Truenas常用SMB服务&#xff0c;但默认并不开启SMB签名。这样具有中间人攻击的风险。 一、漏洞详情 1.1 漏洞报告 漏洞提示如下&#xff1a; 1.2 漏洞介绍 SMB是一个协议名…