小谈设计模式(13)—外观模式

小谈设计模式(13)—外观模式

  • 专栏介绍
    • 专栏地址
    • 专栏介绍
  • 外观模式
    • 主要目的
    • 角色分析
      • 外观(Facade)角色
      • 子系统(Subsystem)角色
      • 客户端(Client)角色
    • 工作原理
    • 核心思想总结
      • 简化接口
      • 解耦客户端和子系统
      • 隐藏实现细节
    • Java程序实现
      • 程序分析
    • 优缺点分析
      • 优点
        • 简化客户端的操作
        • 解耦客户端和子系统
        • 提高系统的可用性和可维护性
      • 缺点
        • 可能导致系统变得更加复杂
        • 限制了灵活性
    • 总结

专栏介绍

专栏地址

link

专栏介绍

主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步,加油,各位。
在这里插入图片描述

外观模式

外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。外观模式定义了一个高层接口,使得子系统更容易使用。

主要目的

简化复杂系统的接口。它通过提供一个统一的接口,隐藏了子系统的复杂性,使得客户端可以更方便地使用系统。外观模式通过将客户端与子系统解耦,提供了一个简化的接口,从而降低了系统的复杂性。
在这里插入图片描述

角色分析

外观(Facade)角色

外观角色是外观模式的核心。它知道哪些子系统类负责处理请求,并将客户端的请求委派给适当的子系统对象。外观角色通常是单例模式,可以提供一个简单的接口,隐藏了子系统的复杂性。

子系统(Subsystem)角色

子系统角色是外观模式中的各个子系统类。它们是实际处理请求的类,完成具体的功能。外观角色将客户端的请求委派给适当的子系统对象,由子系统对象完成具体的操作。

客户端(Client)角色

客户端角色是使用外观模式的类。它通过调用外观角色的接口来完成操作,而不需要直接与子系统类交互。客户端角色只需要知道外观角色提供的简单接口,无需了解子系统的复杂性。

在这里插入图片描述

工作原理

客户端通过调用外观角色的接口来进行操作,外观角色将请求委派给适当的子系统对象,子系统对象完成具体的操作并返回结果给客户端。客户端无需了解子系统的复杂性,只需要通过外观角色来访问子系统。这样可以降低系统的复杂性,提高系统的可维护性和可扩展性。

核心思想总结

简化接口

外观角色提供了一个简化的接口,将子系统的一组接口封装起来,使得客户端可以更方便地使用系统。客户端只需要调用外观角色的接口,无需了解子系统的复杂性。

解耦客户端和子系统

外观模式将客户端与子系统解耦,客户端只需要与外观角色交互,而不需要直接与子系统类交互。这样可以降低客户端的复杂性,同时也提高了系统的可维护性和可扩展性。

隐藏实现细节

外观模式将子系统的实现细节隐藏起来,只暴露给客户端一个简单的接口。这样可以保护子系统的实现细节,防止客户端直接访问和修改子系统的内部实现。
在这里插入图片描述

Java程序实现

// 子系统类A
class SubsystemA {public void operationA() {System.out.println("SubsystemA operation");}
}// 子系统类B
class SubsystemB {public void operationB() {System.out.println("SubsystemB operation");}
}// 外观类
class Facade {private SubsystemA subsystemA;private SubsystemB subsystemB;public Facade() {subsystemA = new SubsystemA();subsystemB = new SubsystemB();}public void operation() {subsystemA.operationA();subsystemB.operationB();}
}// 客户端类
public class Client {public static void main(String[] args) {Facade facade = new Facade();facade.operation();}
}

程序分析

在上面的示例中,我们定义了两个子系统类 SubsystemA 和 SubsystemB,它们分别实现了不同的操作。然后我们定义了一个外观类 Facade,它将子系统类封装起来,并提供了一个简化的接口 operation。客户端类 Client 使用外观类来完成操作,而不需要直接与子系统类交互。
在这里插入图片描述

优缺点分析

优点

简化客户端的操作

外观模式提供了一个简化的接口,隐藏了子系统的复杂性,使客户端更容易使用。

解耦客户端和子系统

外观模式将客户端与子系统解耦,客户端只需要与外观类进行交互,不需要直接与子系统类交互,降低了客户端的复杂性。

提高系统的可用性和可维护性

外观模式将子系统的实现细节封装起来,保护了子系统的实现细节,使系统更加稳定和可维护。
在这里插入图片描述

缺点

可能导致系统变得更加复杂

当系统变得复杂时,外观类可能会变得庞大,难以维护。

限制了灵活性

外观模式隐藏了子系统的复杂性,但也限制了客户端对子系统的灵活访问。

总结

外观模式在简化客户端操作、解耦客户端和子系统、提高系统可用性和可维护性方面具有很大的优势,适用于需要隐藏复杂子系统的情况。但需要注意在设计时避免外观类变得庞大和过于复杂,以及权衡灵活性和封装性。在这里插入图片描述

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

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

相关文章

springboot和vue:九、v-for中的key+vue组件化开发

v-for中的key 目的 现在想要实现这样的一种效果&#xff0c;页面上存在初始姓名表单&#xff0c;同时存在输入框&#xff0c;输入姓名后点击添加按钮可以将新输入的姓名加入显示的姓名表单中。 代码 <!DOCTYPE html> <html lang"en"><head><…

8、Nacos服务注册服务端源码分析(七)

本文收录于专栏 Nacos 中 。 文章目录 前言确定前端路由CatalogController.listDetail()ServiceManager总结 前言 前文我们分析了Nacos中客户端注册时数据分发的设计链路&#xff0c;本文根据Nacos前端页面请求&#xff0c;看下前端页面中的服务列表的数据源于哪里。 确定前端…

【考研数学】高等数学第七模块 —— 曲线积分与曲面积分 | 3. 对面积的曲面积分(第一类曲面积分)

文章目录 二、曲面积分2.1 对面积的曲面积分&#xff08;第一类曲面积分&#xff09;2.1.1 问题引入 —— 曲面的质量2.1.2 对面积的曲面积分定义及性质2.1.3 对面积的曲面积分的计算法 写在最后 二、曲面积分 2.1 对面积的曲面积分&#xff08;第一类曲面积分&#xff09; 2…

【面试经典150 | 矩阵】螺旋矩阵

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;模拟方法二&#xff1a;按层模拟 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于…

C语言实例_调用SQLITE数据库完成数据增删改查

一、SQLite介绍 SQLite是一种轻量级的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是一个开源的、零配置的、服务器端的、自包含的、零管理的、事务性的SQL数据库引擎。它被广泛应用于嵌入式设备、移动设备和桌面应用程序等领域。 SQLite的特点包括&…

【Golang】数组 切片

【Golang】数组 && 切片 1、数组 基本概念 数组是一个由固定长度的特定类型元素组成的序列&#xff0c;一个数组可以由零个或多个元素组成 因为数组的长度是固定的&#xff0c;所以在Go语言中很少直接使用数组 数组初始化 //1、默认数组中的值是类型的默认值 var arr…

华为智能企业上网行为管理安全解决方案(2)

本文承接&#xff1a; https://blog.csdn.net/qq_37633855/article/details/133339254?spm1001.2014.3001.5501 重点讲解华为智能企业上网行为管理安全解决方案的部署流程。 华为智能企业上网行为管理安全解决方案&#xff08;2&#xff09; 课程地址方案部署整体流程组网规划…

ARM-day2

1、1到100累加 .text .global _start_start:MOV r0, #1ADD r1,r0, #1fun:ADD r0,r0,r1ADD r1,r1, #1cmp r1, #0x65moveq PC,LRbl funstop:b stop.end2、思维导图

Spring Boot的自动装配中的@ConditionalOnBean条件装配注解在Spring启动过程中,是如何保证处理顺序靠后的

前言 为什么Spring Boot条件注解那么多&#xff0c;而标题中是ConditionalOnBean呢&#xff1f; 因为&#xff0c;相比之下我们用的比较多的条件装配注解也就是ConditionalOnClass、ConditionalOnBean了&#xff0c;而ConditionalOnClass对顺序并不敏感&#xff08;说白了就是判…

uniapp app 导出excel 表格

直接复制运行 <template><view><button click"tableToExcel">导出一个表来看</button><view>{{ successTip }}</view></view> </template><script>export default {data() {return {successTip: }},metho…

2023年【道路运输企业安全生产管理人员】最新解析及道路运输企业安全生产管理人员考试技巧

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 道路运输企业安全生产管理人员最新解析参考答案及道路运输企业安全生产管理人员考试试题解析是安全生产模拟考试一点通题库老师及道路运输企业安全生产管理人员操作证已考过的学员汇总&#xff0c;相对有效帮助道路运…

JavaSE | 初识Java(五) | 方法的使用

方法就是一个代码片段&#xff0c; 类似于 C 语言中的 " 函数 "。 方法可以是我们代码逻辑更清晰&#xff0c;并且可以服用方法使代码更简洁 方法语法格式 // 方法定义 修饰符 返回值类型 方法名称([参数类型 形参 ...]){ 方法体代码; [return 返回值]; } 实例&…

数据结构:KMP算法的原理图解和代码解析

文章目录 应用场景算法方案算法原理完整代码 本篇总结的是关于串中的KMP算法解析 应用场景 现给定两个串&#xff0c;现在要看较短的一个串是不是较长的串的子串&#xff0c;如果是就输出子串后面的内容&#xff0c;如果不是则输出Not Found 能匹配到&#xff1a; 长串&…

【办公自动化】在Excel中按条件筛选数据并存入新的表(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

Java环境配置无效

Java环境配置无效 老是使用1.8版本&#xff0c;象牛皮癣。 查找java来源 where java 打开C:\Windows\System32 删掉java.exe javaaw.exe javaaws.exe 正常

机器人过程自动化(RPA)入门 3. 顺序、流程图和控制流程

到目前为止&#xff0c;我们已经了解了RPA是什么&#xff0c;并且我们已经看到了通过记录任务的活动并运行它来训练UiPath机器人是多么简单。使用记录器的UiPath可以很容易地自动化日常任务。在我们开始自动化复杂的任务之前&#xff0c;让我们学习如何控制从一个到另一个的活动…

python复习

1.python属于解释型语言&#xff0c;解释器逐行解释每一句代码&#xff0c;然后执行 编译型语言需要由编译器生成最终可执行文件再执行 2. #单行注释""" 多行注释 """ 注释快捷键ctrl/ 3.变量是在计算机语言中能储存计算结果或表示某个数据…

探索腾讯企业邮箱替代方案:选择适合你的新邮件服务

腾讯企业邮箱作为一款广受欢迎的企业级电子邮件服务&#xff0c;已经在国内市场占据了相当大的份额。然而&#xff0c;随着全球市场竞争的加剧&#xff0c;腾讯企业邮箱也面临着海外市场的挑战。本文将探讨腾讯企业邮箱出海的劣势&#xff0c;并推荐一些替代品牌&#xff0c;以…

从其它环境转移到Nacos的方法-NacosSync

理解 NacosSync 组件启动 NacosSync 服务通过一个简单的例子&#xff0c;演示如何将注册到 Zookeeper 的 Dubbo 客户端迁移到 Nacos。 介绍 NacosSync是一个支持多种注册中心的同步组件,基于Spring boot开发框架,数据层采用Spring Data JPA,遵循了标准的JPA访问规范,支持多种…

Neural Networks for Fingerprint Recognition

Neural Computation ( IF 3.278 ) 摘要&#xff1a; 在采集指纹图像数据库后&#xff0c;设计了一种用于指纹识别的神经网络算法。当给出一对指纹图像时&#xff0c;算法输出两个图像来自同一手指的概率估计值。在一个实验中&#xff0c;神经网络使用几百对图像进行训练&…