从零玩转设计模式之外观模式-waiguanmos

news2024/11/15 14:06:47
title: 从零玩转设计模式之外观模式
date: 2022-12-12 15:49:05.322
updated: 2022-12-23 15:34:40.394
url: https://www.yby6.com/archives/waiguanmos
categories: 
- 设计模式
tags: 
- 设计模式

什么是外观模式

外观模式是一种软件设计模式,它提供了一种将多个子系统包装在一个更高级别的接口中的方法,这样客户端就可以通过这个接口来访问这些子系统中的各个功能。外观模式的主要目的是通过简化系统的接口,降低客户端的复杂度,同时也可以隐藏子系统之间的复杂依赖关系。

需求

  1. 进入公司职
    • 行政接待
      • 每一个都是单独子系统
    • 拍照
      • 单独子系统
    • hr办理入职
      • 单独子系统

方法一

一般可能会一个个调用

image-1670832143638

方法二

外观模式

image-1670831914617

定义

又叫门面模式,为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问。
外观模式将一个或者数个类的复杂的一切都隐藏在背后,只显露出一个干净美好的外观。
通过实现一个提供更合理的接口的外观类,你可以将一个复杂的子系统变的更加容易使用。
外观模式不只是简化了接口,也将客户从组件的子系统中解耦。

模式角色

SubSystem:子系统角色
Facade:外观角色
Client:客户端角色

UML图

图1

image-1670832336935

图2

image-1670832339908

优缺点

优点

降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。
对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易。

缺点

不能很好地限制客户使用子系统类,很容易带来未知风险。
增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”

适合场景

  • 想要为复杂的子系统提供简单的接口。
  • 在客户端和抽象的实现类中存在许多依赖关系。
  • 想要对子系统进行分层。
  • 设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式;
  • 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口;
  • 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。

源码当中的应用

springjdbc

  • JdbcUtils 对java.sql中的connection进行封装image-1670832657931

tomcat源码

image-1670832755010image-1670832765327

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

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

相关文章

进阶必看:高速PCB Layout设计的技术指南

当今电子行业中,高速PCB电路越来越广泛,已成为当代PCB工程师的重要技能,而在高速PCB电路中,高速PCB Layout设计是一项高难度高技术的工作,其设计质量直接关系到电路的性能。所以做好PCB Layout设计是非常非常重要的。 …

Boost开发指南-1.2progress_display

Progress_display progress_display可以在控制台上显示程序的执行进度,如果程序执行很耗费时间,那么它能够提供一个友好的用户界面,不至于让用户在等待中失去耐心。 progress_display位于名字空间boost,为了使用progress_displa…

内网自建代理ChatGPT

使用GPT比较频繁,一开始翻墙还能接受,但是用美国节点访问其他国外网站,确实比较麻烦。因此决定自己转发一个出来。 一、获取OpenAI授权密钥 首先,进入platform.openai.com-Personal-View API keys 不过OpenAI的key并不是免费的&…

VMware虚拟机三种网络模式详解之Bridged(桥接模式)

VMware虚拟机三种网络模式详解 Bridged(桥接模式) 由于Linux目前很热门,越来越多的人在学习Linux,但是买一台服务放家里来学习,实在是很浪费。那么如何解决这个问题?虚拟机软件是很好的选择,常…

登高作业安全带穿戴识别系统 yolov5

登高作业安全带穿戴识别系统通过yolov5python网络框架模型技术,登高作业安全带穿戴识别算法模型实现对登高作业人员是否穿戴安全带进行监测并及时发出警报。YOLO系列算法是一类典型的one-stage目标检测算法,其利用anchor box将分类与目标定位的回归问题结…

前端web入门-HTML-day02

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 列表 无序列表 有序列表 定义列表 表格 基本使用 合并单元格 跨列合并 跨行合并 表单 input …

网络安全里主要的岗位有哪些?小白如何快速入门学习黑客?

入门Web安全、安卓安全、二进制安全、工控安全还是智能硬件安全等等,每个不同的领域要掌握的技能也不同。 当然入门Web安全相对难度较低,也是很多人的首选。主要还是看自己的兴趣方向吧。 本文就以下几个问题来说明网络安全大致学习过程👇 网…

软件设计师 数据库刷题项并包含知识点总结

**两级映像 有概念模式和内模式跟物理独立性相关,有外模式和概念模式跟逻辑独立性相关 ** 属性列就是RS共同拥有的ABC,一般去除后面的,所以就只有前面三个ABC,元组就是有没有自然连接成功的,就是R.AS.A R.BS.B… 选项里…

[人工智能原理]

软件工程 定义 采用工程概念、原理、技术、方法来开发、维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好技术方法结合起来,经济开发出高质量软件并有效的维护 基本目标 目标 可用性 正确性 合算性 原则 采用适合的开发范型、开…

计算机操作系统(慕课版)第一章课后题答案

第一章 操作系统引论 一、简答题 1.在计算机系统上配置OS的目标是什么?作用表现在哪几个方面? 在计算机系统上配置OS,主要目标是实现:方便性、有效性、可扩充性和开放性; OS的作用主要表现在以下3个方面: 1…

matplotlib后端@backend@高清图输出格式控制@SVG格式输出

文章目录 notebookmatplotlib🎈matplotlib backendbackendfrontend后端类型AGG配置后端Note不区分大小写三种配置方式在matplotlibrc文件中使用rcParams["backend"]参数:使用MPLBACKEND环境变量:使用matplotlib.use()函数&#xff…

阿里三面过了,却无理由挂了,HR反问一句话:为什么不考虑阿里?

进入互联网大厂一般都是“过五关斩六将”,难度堪比西天取经,但当你真正面对这些大厂的面试时,有时候又会被其中的神操作弄的很是蒙圈。 近日,某位测试员发帖称,自己去阿里面试,三面都过了,却被…

SpringCloud微服务调用方式(RestTemplate)

服务调用方式 RPC和HTTP 无论是微服务还是SOA,都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢? 常见的远程调用方式有以下2种: RPC:Remote Produce Call远程过程调用,类似的还有 。自定义数据格式&am…

由浅入深Netty组件实战

目录 1 EventLoop1.1 演示 NioEventLoop 处理 io 事件1.2 演示 NioEventLoop 处理普通任务1.3 演示 NioEventLoop 处理定时任务 2 Channel2.1 ChannelFuture2.2 CloseFuture 3 Future & Promise3.1 例1:同步处理任务成功3.2 例2:异步处理任务成功3.3…

Navicat premium 15激活教程及安装教程+报错解决办法

Navicat premium 15激活教程及安装教程报错解决办法 1、安装包和注册工具下载2、安装Navicate Premium 15,直接下一步安装即可,安装位置可以按照到D盘3、激活Navicate Premium 15打开安装包里面的Navicat Keygen Patch v5.6.0 DFoX.exe工具当点击path选择…

看完这篇文章你就彻底懂啦{保姆级讲解}-----(I.MX6U驱动UART串口通信) 2023.5.20

目录 前言整体文件结构源码分析(保姆级讲解)串口驱动初始化部分UART1数据收发函数部分 编译结果验证结束语 前言 串口是我们在开发过程中最常用到的外设,所以我们必须掌握。 整体文件结构 源码分析(保姆级讲解) 串口…

[Leetcode刷题] - LC075 Sort Colors

题目描述 一个随机序列包含0,1,2 在不占用额外内存的情况下将序列排序。 题目思路 1. 计数排序 计数排序思路比较简单,记录三个数字出现频率,然后根据频率将0,1,2重新加入数组,思路较为简单…

【数据结构】--单链表力扣面试题④找链表中倒数第k个结点

目录 法一、遍历链表法 法二、快慢指针法 题述:输入一个链表,输出该链表中倒数第k个结点 示例: 输入:1,[1,2,3,4,5] 返回值:[5] 已知链表的定义和函数头FindKthToTail,让你完善FindKthToTail函数 struct ListNode { int…

基于html+css的图展示81

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

探索Vue的组件世界-组件复用

目录 Mixin【混入】 缺陷 HOC(higher order component)【高阶组件】 相比较Mixin的优点: 不足: Renderless组件【函数式组件,无渲染组件,Vue社区使用比较多的一种业务复用模式】 优点: M…