2023-6-27-第九式外观模式

news2024/10/7 10:24:18


🍿*★,°*:.☆( ̄▽ ̄)/$:*.°★* 🍿

💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥
💟💟喜欢的朋友可以关注一下,下次更新不迷路💟💟
😆😆😆私聊获取个人订阅号哦,欢迎订阅共同学习😆😆😆
💖💖💖💖可以加入大家庭群聊,一起学习天天有福利💖💖💖💖





🍬本文摘要

在这里插入图片描述

设计方法二十三式之外观模式


目录

  • 🍬本文摘要
  • 😉一、基础概念
  • 🐱‍🐉二、外观模式实现
  • 🎉三、模块之间的关系
  • 🐱‍🚀四、注意事项
  • 🎂五、使用场景
  • 🍳参考文献
  • 🧊文章总结



😉一、基础概念

外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个高层次的统一接口,用来简化一组子系统的使用。外观模式隐藏了子系统的复杂性,使得客户端能够更加方便地使用子系统功能,同时也降低了客户端与子系统之间的耦合度。

在外观模式中,外观类(Facade Class)充当了客户端与子系统之间的中介,它向客户端提供了一个简单的接口,同时协调并调用子系统中的各个组件完成特定的功能。客户端只需要通过外观类使用子系统,而无需理解其具体实现细节。

外观模式的主要优点包括:

1.简化了客户端的调用过程,降低了客户端的学习成本和使用成本;

2.减少了客户端与各个子系统之间的耦合,提高了系统的灵活性和可维护性;

3.使得子系统内部的变化和修改不会影响到客户端的使用;

4.便于扩展子系统和修改子系统中的功能。

外观模式在实际编程中经常被用到,例如,一个复杂的操作系统的 API 就可以实现为一个外观类,而具体的系统调用则由子系统实现。在使用操作系统的时候,用户只需要调用外观类中的方法,而不用去关心具体的系统调用。


🐱‍🐉二、外观模式实现

以下是一个简单的 C++ 外观模式实现示例:

#include <iostream>
using namespace std;

// 子系统接口1
class Subsystem1 {
public:
    void Operation1() {
        cout << "Subsystem1 Operation1" << endl;
    }
};

// 子系统接口2
class Subsystem2 {
public:
    void Operation2() {
        cout << "Subsystem2 Operation2" << endl;
    }
};

// 外观类
class Facade {
public:
    void Operation() {
        subsystem1.Operation1();
        subsystem2.Operation2();
        cout << "Facade Operation" << endl;
    }
private:
    Subsystem1 subsystem1;
    Subsystem2 subsystem2;
};

// 客户端代码
int main() {
    Facade facade;
    facade.Operation();
    return 0;
}

在上述代码中,Subsystem1 和 Subsystem2 分别表示两个子系统,它们各自实现了自己的功能。而 Facade 则充当了这两个子系统的外观类,它提供了一个 Operation() 接口,将 Subsystem1 和 Subsystem2 的操作整合在一起,从而向客户端提供了一个简单的接口。当客户端需要使用 Subsystem1 和 Subsystem2 时,只需要调用 Facade 类的 Operation() 方法即可。

在实际编程中,外观模式可以适用于很多场景,例如,一个电视机的遥控器就是一个外观模式,用户只需要通过遥控器的按钮来控制电视机,而不用了解电视机内部的电路原理和具体操作。


🎉三、模块之间的关系

外观模式主要用于简化复杂系统的使用和维护,将子系统的多个模块组合起来提供一个更加简单、易于使用的接口给客户端使用。在外观模式中,各个子系统之间的关系是相互独立的,由外观类来协调他们之间的通信,实现系统的组装和解耦。

在外观模式中,子系统之间的关系是通过外观类来建立的。外观类封装了多个子系统之间的复杂关系,在外观类中提供一个简单的接口供客户端使用。客户端只需要通过外观类来访问各个子系统即可,而不必关心子系统之间的复杂关系。

通常情况下,子系统之间通过直接调用的方式来进行交互。外观类将多个子系统整合起来,对外提供一个更简单的接口。这种组合和解耦的方式使得系统更加易于扩展和维护,同时也提高了系统的灵活性和可维护性。

总的来说,外观模式实现了子系统之间的松耦合,提高了系统的可维护性和可扩展性,同时也为客户端提供了更友好、易于使用的接口。


🐱‍🚀四、注意事项

在使用外观模式时,需要注意以下几个方面:

  1. 对于多层次的系统,需要设计合适的外观类来对系统进行整合。外观类应该尽可能简单,只提供必要的接口给客户端使用。

  2. 外观模式并不限制系统中子系统的使用方式,对于不同的子系统可以采用不同的访问方式。例如,有些子系统可能需要经过复杂的初始化和配置过程才能使用,而有些子系统则可以直接访问。

  3. 外观模式可以用来解决多个子系统间相互依赖而引起的循环依赖问题。但是,需要注意控制外观类的复杂度,避免过多的子系统依赖导致外观类变得臃肿不易维护。

  4. 在设计外观类时,需要尽可能避免暴露子系统底层的实现细节,保证客户端无需了解子系统的具体实现就能够直接使用。

  5. 外观模式本质上是将复杂的系统从客户端中抽象出来,因此需要考虑到系统的发展变化、用户需求等因素,设计出具有弹性和可扩展性的系统。

总之,在使用外观模式时需要根据实际情况进行设计和调整,使得系统的内部子系统能够更加灵活、简单、易于维护和扩展。


🎂五、使用场景

外观模式适用于以下场景:

  1. 系统复杂,包含多个子系统且子系统之间存在相互依赖关系,需要提供一个统一的接口给客户端使用。

  2. 不同子系统的接口复杂度不同,客户端需要通过一个简单的接口访问这些子系统。

  3. 需要改变或替换系统中的子系统时,外观模式可以降低重构的难度和影响范围。

  4. 需要减少客户端与子系统之间的耦合度,从而降低客户端代码的复杂度。

具体的应用场景包括:

  1. 操作系统的API或Windows的API就是一种外观模式,将复杂的操作系统功能抽象为简单的API接口供应用程序使用。

  2. 商城平台订单交易系统,将订单接收、处理、支付、配送的过程封装在外观类中,客户端只需调用外观类的一个接口即可完成整个订单的处理。

  3. 电影院售票系统,将座位选择、支付、票务打印等过程封装在外观类中,客户端只需调用外观类的一个接口即可完成整个购票过程。

在这些应用场景中,外观模式的作用都是将复杂的系统和子系统进行封装,提供一个更加简单易用的接口给客户端使用。这种模式可以降低客户端和子系统之间的耦合度,提高系统的可维护性和可扩展性。


🍳参考文献

🧊文章总结

提示:这里对文章进行总结:

   本文讲了关于外观模式的知识。






更多好文推荐

🍸2021-4月Python 机器学习——中文新闻文本标题分类
🍹2021年4月-(计算机网络)小型校园网络模拟搭建,最全最准确版
🍺2022-10-31-基于用户的协同过滤推荐算法实现+MAE+RMSE
🍻2022-11-28-大数据可视化,特征维度大于50
🥂2023-3-9-一篇简短的文章把C++左右值关系讲的透透彻彻

上一篇
End
下一篇

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

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

相关文章

HBase性能调优(二)

感谢点赞和关注 &#xff0c;每天进步一点点&#xff01;加油&#xff01; 版权声明&#xff1a;本文为CSDN博主「开着拖拉机回家」的原创文章&#xff0c;遵循CC 4.0 BY-SA版权协议&#xff0c;转载请附上原文出处链接及本声明。 Hbase性能调优&#xff08;二&#xff09;_开着…

计算机网络——自顶向下方法(第六章学习记录)

链路层概述 将运行链路层协议的任何设备均称为节点&#xff08;node&#xff09;。节点包括主机、路由器、交换机和WiFi接入点。把沿着通信路径连接相邻节点的通信信道称为链路&#xff08;link&#xff09;。为了将一个数据报从源主机传输到目的主机&#xff0c;数据报必须通…

智慧班牌源码,基于Java+springboot+vue +element-ui+小程序开发

电子班牌系统又称之为智慧班牌&#xff0c;是当前校园数字化信息化建设、文化建设的主流&#xff0c;是校园日常工作安排、校园信息发布、班级文化风采展示、课堂交流、家校互通的重要应用载体。在每个班级门口安装一台电子班牌终端&#xff0c;实现学校日常管理、校园信息化建…

MySQL的MHA高可用

MySQL的MHA高可用 一、MHA简介1、什么是MHA2、MHA的组成3、MHA的特点4、MHA原理图 二、搭建MySQL的MHA高可用1、实验思路2、实验3、故障模拟 一、MHA简介 1、什么是MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的…

jupyter-notebook使用指南

jupyter-notebook使用指南 jupyter-notebook安装[python版][anaconda版] jupyter-notebook如何导出PDF&#xff1f;【没解决&#xff0c;直接看最后&#xff0c;不要跟着操作&#xff01;】正常导出步骤安装Pandoc安装Xelatex问题没解决&#xff0c;懒得安装了&#xff0c;放弃…

6.26学习 es6中的类

学习 es6中的类 1.了解构造函数的属性2.类的继承2.1继承父类实例上的属性2.2继承父类原型上的属性或则方法&#xff08;公共属性或则方法&#xff09;2.2.1 Object.create2.2.2 Object.setPrototypeOf 3.es6中的类3.1定义3.2 继承 1.了解构造函数的属性 先上一份代码思考一下它…

css基础知识十二:CSS3常见动画有哪些?实现方式?

一、是什么 CSS动画&#xff08;CSS Animations&#xff09;是为层叠样式表建议的允许可扩展标记语言&#xff08;XML&#xff09;元素使用CSS的动画的模块 即指元素从一种样式逐渐过渡为另一种样式的过程 常见的动画效果有很多&#xff0c;如平移、旋转、缩放等等&#xff…

服务器技术(三)--Nginx

Nginx介绍 Nginx是什么、适用场景 Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力确实在同类型的网页服务器中表现较好。 Nginx专为性能优化而开发&#xff0c;性能是其最重要的考量&#xf…

硬件设计-PLL篇(上)

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 锁相环是一种反馈系统&#xff0c;其中电压控制振荡器(VCO) 和相位比较器相互连接&#xff0c;使得振荡器 可以相对于参考信号维持恒定的相位角度。锁相环可用来从固定的低频信…

linux上虚拟机vmware-workstation使用教程

linux上虚拟机vmware-workstation使用教程 一、vmware-workstation安装及卸载二、vmware-workstation基本操作命令4.1 启动和停止服务 本文介绍了在centos上安装vmware-workstation的使用教程。 一、vmware-workstation安装及卸载 本人实战记录&#xff1a;linux上虚拟机vmwa…

数据结构与算法之稀疏数组

稀疏数组 Java 数据结构与算法数据结构简介 稀疏数组&#xff08;sparse array&#xff09;简介二维数组转稀疏数组的思路稀疏数组转为原始的二维数组 Java 数据结构与算法 该学习代码都在&#x1f517;上 数据结构 简介 数据结构包括&#xff1a;线性结构和非线性结构。 线…

多肽药物产业学习笔记

文章目录 0. 背景0.Last 1. 行业初识1.1 行业壁垒1.2 多肽药物的特性及优势1.3 小分子药的特点 多肽药物发现策略多肽药物主要治疗领域罕见病肿瘤 糖尿病(GLP-1 )胃肠道骨科免疫心血管 关于利拉鲁肽X. 几个概念X.1 CXO业务X.1.1 CDMOX.1.2 CMOX.1.3 CRO X.1.4 CMO和CDMO的联系与…

“面试造飞机,上岗拧螺丝“?2023软件测试岗面试真题超全面整理(最新版)

软件测试这个岗位&#xff0c;想要找到一份高薪的工作&#xff0c;离不开繁杂的面试程序&#xff0c;这相信是很多准备应聘软件测试岗的朋友难题&#xff0c;很多已经在职多年的软件测试工程师对于这个岗位面试都谈虎色变&#xff0c;那么&#xff0c;为什么软件测试岗位的面试…

接口测试的目的

目录 前言&#xff1a; 1、接口测试可以确保系统功能的正确性。 2、接口测试可以保证系统的可靠性。 3、接口测试有助于为客户提供最佳的用户体验。 4、接口测试还可以帮助开发人员评估系统的性能。 5、接口测试可以帮助团队提高协作效率。 前言&#xff1a; 接口测试是…

基于STM32设计的汽车修理厂环境监测系统(华为云IOT)

一、前言 生产车间的环境质量监测仅靠传统的手持式仪器仪表及手工记录无法保证数据的即时性和准确性。因此,设计并实现了一种综合传感器技术、无线通信技术和移动应用开发技术的车间环境质量监测系统。 本系统以STM32为主控芯片,外接各种传感器模块采集环境信息,并将采集数…

Windows 下后台启动 jar 包,UTF-8 启动 jar 包

目录 1. Windows 下启动 jar 包2. 设置 cmd 编码3. UTF-8 编码启动 jar 包 1. Windows 下启动 jar 包 前台启动 jar 包&#xff1a; java -jar xxx.jar后台启动 jar 包&#xff1a; javaw -jar xxx.jar后台启动 jar 包脚本&#xff08;start.bat&#xff09;&#xff1a; e…

Django框架之邮件系统,涉及HTML、富文本、附件邮件发送

参考 (892条消息) Django框架之邮件系统&#xff0c;涉及HTML、富文本、附件邮件发送_django邮件系统_李恩泽的技术博客的博客-CSDN博客https://blog.csdn.net/heroiclee/article/details/121406488 发送设置&#xff08;settings.py&#xff09; EMAIL_USE_SSL True # Sec…

通俗易懂讲解CPU、GPU、FPGA的特点

1. CPU vs GPU 大家可以简单的将CPU理解为学识渊博的教授&#xff0c;什么都精通&#xff1b;而GPU则是一堆小学生&#xff0c;只会简单的算数运算。可即使教授再神通广大&#xff0c;也不能一秒钟内计算出500次加减法。因此&#xff0c;对简单重复的计算来说&#xff0c;单单一…

畅聊职场之:作为程序员,不可不知道的银行IT岗位,收藏备选。

程序员向往的银行IT岗 1、引言2、国有商业银行2.1 中国农业银行2.2 中国邮政银行2.3 中国工商银行2.4 中国银行2.5 中国建设银行2.6 中国交通银行 3、股份制商业银行3.1 招商银行3.2 浙商银行3.3 浦发银行3.4 平安银行3.5 渤海银行3.6 中国民生银行3.7 中信银行3.8 中国光大银行…

60 KVM Skylark虚拟机混部-安装和配置

文章目录 60 KVM Skylark虚拟机混部-安装和配置60.1 安装Skylark60.1.1 硬件要求60.1.2 软件要求60.1.3 安装方法 60.2 配置Skylark60.2.1 日志60.2.2 功耗干扰控制60.2.3 LLC/MB干扰控制 60 KVM Skylark虚拟机混部-安装和配置 60.1 安装Skylark 60.1.1 硬件要求 处理器架构…