从零玩转设计模式之外观模式-waiguanmos
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:
- 设计模式
什么是外观模式
外观模式是一种软件设计模式,它提供了一种将多个子系统包装在一个更高级别的接口中的方法,这样客户端就可以通过这个接口来访问这些子系统中的各个功能。外观模式的主要目的是通过简化系统的接口,降低客户端的复杂度,同时也可以隐藏子系统之间的复杂依赖关系。
需求
- 进入公司职
- 行政接待
- 每一个都是单独子系统
- 拍照
- 单独子系统
- hr办理入职
- 单独子系统
- 行政接待
方法一
一般可能会一个个调用

方法二
外观模式

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

图2

优缺点
优点
降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。
对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易。
缺点
不能很好地限制客户使用子系统类,很容易带来未知风险。
增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”
适合场景
- 想要为复杂的子系统提供简单的接口。
- 在客户端和抽象的实现类中存在许多依赖关系。
- 想要对子系统进行分层。
- 设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式;
- 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口;
- 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。
源码当中的应用
springjdbc
- JdbcUtils 对java.sql中的connection进行封装

tomcat源码


从零玩转设计模式之外观模式-waiguanmos的更多相关文章
- 每天一个设计模式-2 外观模式(Facade)
每天一个设计模式-2 外观模式(Facade) 1.生活中的示例 客户想要购买一台电脑,一般有两种方法: 1.自己DIY,客户需要知道组成电脑的所有电子器件,并且需要熟悉那些配件,对客户要求较高. ...
- C#设计模式(11)——外观模式(Facade Pattern)
一.引言 在软件开发过程中,客户端程序经常会与复杂系统的内部子系统进行耦合,从而导致客户端程序随着子系统的变化而变化,然而为了将复杂系统的内部子系统与客户端之间的依赖解耦,从而就有了外观模式,也称作 ...
- 乐在其中设计模式(C#) - 外观模式(Facade Pattern)
原文:乐在其中设计模式(C#) - 外观模式(Facade Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 外观模式(Facade Pattern) 作者:webabcd 介绍 ...
- 设计模式之 外观模式详解(Service第三者插足,让action与dao分手)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 各位好,LZ今天给各位分享一 ...
- 8.4 GOF设计模式三: 外观模式 Facade
GOF设计模式三: 外观模式 Facade “现有系统”功能强大.复杂,开发“新系统”需要用到其中一部分,但又要增加一部 分新功能,该怎么办?4.1 Facade Pattern: Key Fea ...
- 北风设计模式课程---外观模式(Facade)总结
北风设计模式课程---外观模式(Facade)总结 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用户获得装备,我可以先装备 ...
- js设计模式——2.外观模式
js设计模式——2.外观模式
- python设计模式之外观模式
python设计模式之外观模式 系统会随着演化变得非常复杂,最终形成大量的(并且有时是令人迷惑的)类和交互,这种情况并不少见.许多情况下,我们并不想把这种复杂性暴露给客户端.外观设计模式有助于隐藏系统 ...
- Java进阶篇设计模式之五-----外观模式和装饰器模式
前言 在上一篇中我们学习了结构型模式的适配器模式和桥接模式.本篇则来学习下结构型模式的外观模式和装饰器模式. 外观模式 简介 外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这 ...
- Java设计模式之五 ----- 外观模式和装饰器模式
前言 在上一篇中我们学习了结构型模式的适配器模式和桥接模式.本篇则来学习下结构型模式的外观模式和装饰器模式. 外观模式 简介 外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这 ...
随机推荐
- PivotGridControl自定义行数据的统计公式
我们在使用PivotGridControl进行数据统计的时候,用时候需要在不同的行使用不同的汇总公式的情况,本文就是为了说明怎么实现此功能,如下图说明 数据源: 注意:此时数据列指定的SummaryT ...
- 拯救Win7,2023该如何正确升级?
对于现存的Win7系统用户,微软曾多次提醒将在2023年1月停止对Win7与Win8.1的安全更新和技术支持.而转眼已经来到2023,时间已到,对于Win7,微软已经再也不管了,停止为Win7用户提供 ...
- c语言代码练习14
//设计一个猜数字游戏,需要提示猜大了还是小了,直到猜对为止 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include & ...
- C#学习笔记——变量、常量和转义字符
变量 变量是存储数值的容器,是一门程序语言的最基础的部分. 不同的变量类型可以存储不同类型的数值. 种类: 在C#种一共有14种变量: 有符号类型4种 无符号类型4种 浮点数3种 特殊类型(char ...
- a-2b
a-2b 描述 输入两个高精度数a和b,求a-2b的值. 输入 输入两行,第一行是被减数a,第二行是减数b(a>2b并且a,2b的位数不同且不存在借位,且b+b不存在进位). 输出 一行,即 ...
- 【翻译】listener.ora
今天仔细过一遍oracle的监听配置文件描述. cat $ORACLE_HOME/network/admin/samples/listener.ora # copyright (c) 1997 by ...
- JuiceFS 目录配额功能设计详解
JuiceFS 在最近 v1.1 版本中加入了社区中呼声已久的目录配额功能.已发布的命令支持为目录设置配额.获取目录配额信息.列出所有目录配额等.完整的详细信息,请查阅文档. 在设计此功能时,对于它的 ...
- 2020/4/26 2-sat 学习笔记
2-sat 吧.... 其实我jio得它一点都不难 嗯 2-sat是个啥东西呢?其实就是有很多人,他们每个人有两个要求,一个要求可以说是要求一个数为0或1而对于第i个数,我们可以选择为0或为1最终询问 ...
- CF1363C
题目简化和分析: 首先注意特判 $ x $ 在叶子节点上 ( 即度为 \(1\) ). 因为每人都采用最优策略所以不可能有人执着的为别人开路. 就是不在同一颗子树上挣扎,会从外围不断清理. 但是每步必 ...
- 文心一言 VS 讯飞星火 VS chatgpt (116)-- 算法导论10.3 1题
一.用go语言,画图表示序列(13,4,8,19,5,11),其存储形式为多数组表示的双向链表.同样画出单数组表示的形式. 文心一言: 在Go语言中,我们无法直接画图,但我可以帮助你描述如何使用Go语 ...