当前位置: 首页 > news >正文

10、外观模式(Facade Pattern,不常用)

外观模式(Facade Pattern)也叫作门面模式,通过一个门面(Facade)向客户端提供一个访问系统的统一接口,客户端无须关心和知晓系统内部各子模块(系统)之间的复杂关系,其主要目的是降低访问拥有多个子系统的复杂系统的难度,简化客户端与其之间的接口。外观模式将子系统中的功能抽象成一个统一的接口,客户端通过这个接口访问系统,使得系统使用起来更加容易。

简单来说,外观模式就是将多个子系统及其之间的复杂关系和调用流程封装到一个统一的接口或类中以对外提供服务。这种模式涉及3种角色。

  • 子系统角色:实现了子系统的功能。
  • 门面角色:外观模式的核心,熟悉各子系统的功能和调用关系并根据客户端的需求封装统一的方法来对外提供服务。
  • 客户角色:通过调用Facade来完成业务功能。

以汽车的启动为例,只需按下启动按钮,后台就会自动完成引擎启动、仪表盘启动、车辆自检等过程。通过外观模式将汽车启动这一系列流程封装到启动按钮上,对于用户来说只需按下启动按钮即可,不用太关心具体的细节。UML设计图如下:

1)定义Engine类:

@Slf4j
public class Engine {public void startup() {log.info("engine startup...");}public void shutdown() {log.info("engine shutdown...");}
}

2)定义Dashboard类:

@Slf4j
public class Dashboard {public void startup() {log.info("dashboard startup...");}public void shutdown() {log.info("dashboard shutdown...");}
}

3)定义SelfCheck类:

@Slf4j
public class SelfCheck {public void startup() {log.info("SelfCheck startup...");}public void shutdown() {log.info("SelfCheck shutdown...");}
}

4)定义门面类Starter封装Engine、Dashboard、SelfCheck:

package cn.jaa.facade_pattern;import lombok.extern.slf4j.Slf4j;/*** @Author: Jaa* @Description: 启动按钮* @Date 2023/11/30*/
@Slf4j
public class Starter {private Engine engine;private Dashboard dashboard;private SelfCheck selfCheck;public Starter() {this.engine = new Engine();this.dashboard = new Dashboard();this.selfCheck = new SelfCheck();}public void startup() {log.info("====car begin startup====");engine.startup();dashboard.startup();selfCheck.startup();log.info("====car startup finished====");}public void shutdown() {log.info("====car begin shutdown====");engine.shutdown();dashboard.shutdown();selfCheck.shutdown();log.info("====car shutdown finished====");}
}

5)测试外观模式:

package cn.jaa.facade_pattern;import lombok.extern.slf4j.Slf4j;/*** @Author: Jaa* @Description: 外观模式测试类* @Date 2023/11/30*/
@Slf4j
public class FacadeDemoTest {public static void main(String[] args) {Starter starter = new Starter();// 启动汽车starter.startup();// 熄灭汽车starter.shutdown();}
}

运行结果:

相关文章:

10、外观模式(Facade Pattern,不常用)

外观模式(Facade Pattern)也叫作门面模式,通过一个门面(Facade)向客户端提供一个访问系统的统一接口,客户端无须关心和知晓系统内部各子模块(系统)之间的复杂关系,其主要…...

<软考>软件设计师-3程序设计语言基础(总结)

(一) 程序设计语言概述 1 程序设计语言的基本概念 1-1 程序设计语言的目的 程序设计语言是为了书写计算机程序而人为设计的符号语言,用于对计算过程进行描述、组织和推导。 1-2 程序语言分类 低级语言 : 机器语言(计算机硬件只能识别0和1的指令序列)&…...

C/C++---------------LeetCode第278. 第一个错误的版本

第一个错误的版本 题目及要求二分查找 题目及要求 你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。 假设你…...

C语言三种循环输出9*9乘法表

解题思路&#xff1a; 1、外层循环控制1~9循环 2、内层控制循环的次数 比如&#xff1a; 1 * 1 1 循环一次 1 * 1 1 1 * 2 循环两次 依此类推 int i, j;printf("for 打印9*9乘法表\r\n");for(i 1; i <10; i) {for(j 1; j < i;j) {printf("%d * %d %d…...

IntelliJ IDEA 之初体验

文章目录 第一步&#xff1a;下载与安装 IntelliJ IDEA1&#xff09;官网下载2&#xff09;选择那种安装包3&#xff09;开始下载4&#xff09;解压 第二步&#xff1a;启动 IntelliJ IDEA第三步&#xff1a;创建第一个 Java 项目第四步&#xff1a;运行第一个 Java 程序1&…...

java中synchronized和Lock的区别是什么?

synchronized 和 Lock 都是 Java 中用于实现线程同步的机制&#xff0c;但它们在使用方式和功能上存在一些区别。 使用方式 synchronized&#xff1a; 是 Java 语言关键字&#xff0c;可用于方法或代码块。通过 synchronized 关键字实现的同步是隐式的&#xff0c;无需手动释…...

ESP32-Web-Server编程-通过 Base64 编码在网页中插入图片

ESP32-Web-Server编程-通过 Base64 编码在网页中插入图片 概述 不同于上节 ESP32-Web-Server编程-在网页中通过 src 直接插入图片&#xff0c;本节引入 Base64 编码来显示图片。 Base64 是一种用64个字符来编码表示任意二进制数据的方法。任何符号都可以转换成 Base64 字符集…...

聊一聊大模型 | 京东云技术团队

事情还得从ChatGPT说起。 2022年12月OpenAI发布了自然语言生成模型ChatGPT&#xff0c;一个可以基于用户输入文本自动生成回答的人工智能体。它有着赶超人类的自然对话程度以及逆天的学识。一时间引爆了整个人工智能界&#xff0c;各大巨头也纷纷跟进发布了自家的大模型&#…...

pandas空格及网页空格符NBSP替换处理

df3[动作一课程内容]df3[动作一课程内容].str.replace( ,) df3[动作一课程内容]df3[动作一课程内容].str.replace( ,) 截图中代码为python展示代码&#xff0c;由于网页空格符和常规空格符看起来大致相同&#xff0c;但却不能用常规空格替换解决...

智能优化算法应用:基于战争策略算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于战争策略算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于战争策略算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.战争策略算法4.实验参数设定5.算法结果6.参考…...

数据结构和算法-栈

数据结构和算法-栈 1. 栈的介绍 栈的介绍&#xff1a; 栈的英文为(stack)栈是一个先入后出的有序列表栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端&#xff0c;为变化的一端&#xff0c;称为栈顶&#xff0c;另一端为固…...

C#基础与进阶扩展合集-进阶篇(持续更新)

目录 本文分两篇&#xff0c;基础篇点击&#xff1a;C#基础与进阶扩展合集-基础篇 一、进阶 1、Predicate 2、设置C#语言版本 3、ListCollectionView过滤集合 4、值类型与引用类型 5、程序设置当前项目工作目录 6、获取App.config配置文件中的值 7、Linq常用语句 8、…...

快速入门GitHub 之超简单的注册方法和超好用的使用技巧

最近几天发现有些人对Github网站很好奇,但是无奈自己不会用,因为是外国人的网站,首先自己的英文就不过关。对于这个,其实可以用谷歌浏览器去浏览Github,它有一键翻译的功能。但还是有必要介绍一下关于Github的一些功能和具体操作,初学编程语言的小伙伴们一定对 GitHub 有…...

ESP32-Web-Server编程- 在 Web 上开发动态纪念册

ESP32-Web-Server编程- 在 Web 上开发动态纪念册 概述 Web 有很多有趣的玩法&#xff0c;在打开网页的同时送她一个惊喜。 需求及功能解析 本节演示在 ESP32 上部署一个 Web&#xff0c;当打开对应的网页时&#xff0c;将运行动态的网页内容&#xff0c;显示炫酷的纪念贺词…...

双向ESD保护 汽车级TVS二极管 ESD9B3.3ST5G工作原理、特性参数、封装形式

什么是汽车级TVS二极管&#xff1f; TVS二极管是一种用于保护电子电路的电子元件。它主要用于电路中的过电压保护&#xff0c;防止电压过高而损坏其他部件。TVS二极管通常被称为“汽车级”是因为它们能够满足汽车电子系统的特殊要求。 在汽车电子系统中&#xff0c;由于车辆启…...

Ribbon-IRule 修改负载均衡的规则

1、负载均衡规则描述 &#xff08;1&#xff09;整体关系 &#xff08;2&#xff09;规则描述 内置负载均衡规则类规则描述RoundRobinRule简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。AvailabilityFilteringRule对以下两种服务器进行忽略: (1)在默认情况下&…...

双十二电视盒子哪个牌子最好?自费3000+测评整理电视盒子推荐

双十二不知道电视盒子哪个牌子最好的新手很多&#xff0c;想要我分享电视盒子推荐&#xff0c;为结果更客观我花费三千多购入了十几款热销电视盒子&#xff0c;通过一个月时间的全面对比测评后整理了电视盒子推荐&#xff0c;给双十二不知道怎么选电视盒子的朋友们提供参考。 一…...

排序:直接选择排序

直接选择排序&#xff1a; 本质&#xff1a; 直接选择排序的本质就是在数组中进行遍历挑选出最大的元素&#xff0c;讲最大的元素放到对应的位置后&#xff0c;再次选出次大的位置&#xff0c;而后又放到对应的位置..........................直到数组成为一个有序序列。 优…...

Nacos多数据源插件

Nacos从2.2.0版本开始,可通过SPI机制注入多数据源实现插件,并在引入对应数据源实现后,便可在Nacos启动时通过读取application.properties配置文件中spring.datasource.platform配置项选择加载对应多数据源插件.本文档详细介绍一个多数据源插件如何实现以及如何使其生效。 注意:…...

【Java基础篇 | 面向对象】—— 聊聊什么是接口(上篇)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习JavaSE的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 关于接口的简单的介绍…...

HackBGRT:UEFI启动界面定制的极简实施指南

HackBGRT&#xff1a;UEFI启动界面定制的极简实施指南 【免费下载链接】HackBGRT Windows boot logo changer for UEFI systems 项目地址: https://gitcode.com/gh_mirrors/ha/HackBGRT HackBGRT是一款专注于UEFI系统的开源工具&#xff0c;为用户提供安全高效的启动画面…...

Llama-3.2V-11B-cot设计稿理解效果:从UI草图到前端代码描述

Llama-3.2V-11B-cot设计稿理解效果&#xff1a;从UI草图到前端代码描述 最近在尝试一些新的AI工具时&#xff0c;我偶然接触到了Llama-3.2V-11B-cot这个模型。它有一个听起来挺有意思的能力&#xff1a;能“看懂”设计稿。作为一个经常在设计和开发之间做“翻译”的人&#xf…...

【PVE实战】低成本2.5G网卡升级与iperf3性能验证全记录

1. 为什么需要升级到2.5G网络环境 最近几年&#xff0c;随着NAS、视频剪辑、虚拟机等应用场景的普及&#xff0c;传统的千兆网络&#xff08;1Gbps&#xff09;越来越显得力不从心。我自己就经常遇到这样的情况&#xff1a;在局域网内传输大文件时&#xff0c;千兆网络的极限速…...

解决AtlasOS系统中Xbox控制器驱动问题的5个实用技巧

解决AtlasOS系统中Xbox控制器驱动问题的5个实用技巧 【免费下载链接】Atlas &#x1f680; An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/atlas1/Atlas …...

Nunchaku-flux-1-dev极限测试:生成超高清与超大宽幅图像的效果边界

Nunchaku-flux-1-dev极限测试&#xff1a;生成超高清与超大宽幅图像的效果边界 最近在尝试一些新的图像生成模型&#xff0c;发现Nunchaku-flux-1-dev这个版本在社区里讨论度挺高&#xff0c;尤其是关于它处理高分辨率图像的能力。很多人都在问&#xff0c;这个模型到底能生成…...

MusePublic显存利用率提升方案:CPU卸载+自动清理策略详解

MusePublic显存利用率提升方案&#xff1a;CPU卸载自动清理策略详解 1. 项目背景与显存挑战 MusePublic是一款专为艺术感时尚人像创作设计的轻量化文本生成图像系统。基于专属大模型和safetensors格式封装&#xff0c;系统针对艺术人像的优雅姿态、细腻光影和故事感画面进行了…...

Phi-3-vision-128k-instruct 代码理解能力展示:解析截图中的复杂算法伪代码

Phi-3-vision-128k-instruct 代码理解能力展示&#xff1a;解析截图中的复杂算法伪代码 1. 引言 最近在GitHub上看到一个有趣的项目&#xff0c;测试了Phi-3-vision-128k-instruct模型对编程相关图像的理解能力。作为一个经常需要阅读算法伪代码的程序员&#xff0c;我对这个…...

QT实战:用QScrollArea+QListWidget复刻迅雷设置界面(附完整源码)

QT实战&#xff1a;用QScrollAreaQListWidget复刻迅雷设置界面&#xff08;附完整源码&#xff09; 在桌面应用开发中&#xff0c;设置界面的设计往往考验着开发者对布局和交互逻辑的掌控能力。迅雷作为一款经典的下载工具&#xff0c;其设置界面以清晰的导航结构和流畅的滚动体…...

Docker容器中运行Windows系统的突破性企业级解决方案:架构解析与部署实践

Docker容器中运行Windows系统的突破性企业级解决方案&#xff1a;架构解析与部署实践 【免费下载链接】windows Windows inside a Docker container. 项目地址: https://gitcode.com/GitHub_Trending/wi/windows 在当今云原生和容器化技术快速发展的背景下&#xff0c;如…...

从WHL文件到集成开发:Windows系统下PySide2的完整部署指南

1. 为什么选择PySide2开发Windows GUI应用 用Python开发图形界面程序有很多选择&#xff0c;但PySide2绝对是Windows平台下最值得推荐的工具之一。作为Qt官方绑定的Python库&#xff0c;PySide2不仅功能强大&#xff0c;还能免费商用。我最早接触PySide2是在一个工业控制项目里…...