设计模式之门面(Facade)模式

前言

        在组建构建过程中,某些接口之间直接的依赖常常会带来很多问题、甚至跟本无法实现。采用添加一层(间接)稳定接口,来隔离本来互相紧密关联的接口是一种常见的解决方案

定义

        “接口隔离” 模式。为子系统中的一组接口提供一个一致(稳定)的界面,门面模式定义了一个高层接口。这个接口使得这一子系统更加容易使用(复用)

动机

             

        上述A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战

        如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化和内部子系统的变化之间的依赖互相解耦?

案例

       略

类图

        

总结

        从客户程序的角度来看,门面模式简化了整个组件系统的接口,对于组件内部与外部客户程序来说,达到了一种 “解耦” 的效果——内部子系统的任何变化不会影响到门面接口的变化

        门面模式设计更注重从架构的层次去看整个系统,而不是单个类的层次。门面很多时候更是一种架构设计模式

        门面设计模式并非一个集装箱,可以任意地放进任何多个对象。门面模式中组件的内部应该是 “相互耦合关系比较大的一系列组件”,而不是一个简单的功能集合

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

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

相关文章

Spring Boot技术:构建高效网上购物平台

第3章 系统分析 3.1 可行性分析 在系统开发之初要进行系统可行分析,这样做的目的就是使用最小成本解决最大问题,一旦程序开发满足用户需要,带来的好处也是很多的。下面我们将从技术上、操作上、经济上等方面来考虑这个系统到底值不值得开发。…

Linux下永久修改hostname

root登录 vi /etc/sysconfig/networkvi /etc/hostsreboot重启服务器 hostname查询

多线程基础 保姆级讲解

多线程基础 认识线程1)线程是什么2) 为啥要有线程3) 进程和线程的区别 (经典面试题) 多线程线程的创建方式方法1 继承 Thread 类方法2 实现 Runnable 接口方法3 使用匿名内部类创建 Thread 子类对象方法4 匿名内部类创建 Runnable 子类对象方法5 lambda …

塑封芯片多大才需要点胶加固保护?

塑封芯片多大才需要点胶加固保护? 塑封芯片是否需要点胶加固保护,并不完全取决于芯片的大小,而是由多种因素共同决定的。以下是一些影响是否需要点胶加固保护的主要因素: 芯片的应用场景:如果芯片所处的环境较为恶劣&a…

买量内卷严重,小游戏们不得不迈向长期展线

小游戏这两年有多火爆自然不必多说。根据《2024 年 1-6 月中国游戏产业报告》,今年 1-6 月国内移动游戏市场实销收入 1075.17 亿元,同比增长 0.76%,较为平稳;但同时小程序移动游戏(即小游戏)收入达 166.03 …

如何在网站建设中不被外包建站公司忽悠?

让我来公开一些代建站行业忽悠甲方背后的套路吧, 长篇干货警告! 像我们这一行网站建设的外包服务商,忽悠人的情况是普遍的事情! 很多低劣的外包公司,凭着做一单忽悠一单的手段,成为了我们建站行业的害群之…

Python 使用selenium 4.25 进行爬虫(1)

都说python做爬虫比较好,于是我跟着大家的脚步学习python进行爬虫,但是调试了半天,出现各种各样的问题,最终都得到实现了,下面我们来看具体的代码: from selenium import webdriver from selenium.webdriv…

秋招突击——9/13——携程提前准备和实际面经——专程飞过去线下,结果一面挂(难受)

文章目录 引言面经收集面经整理一1. ArrayList和LinkedList2. 线程安全的列表和链表有么?如果没有怎么实现?3. threadlocal4. synchronized锁升级过程及原理5. ReentrantLock原理,以及和synchronized的对比6. 线程池工作原理7. redis常用数据…

Blob数据类型报错时如何获取错误信息

const pdfOrg async (record) > {// 假设 transferExportPdf是结构 result 返回的错误信息let result await transferExportPdf({ batchId: record.batchId });//blob 结构const blob new Blob([result], {type: result.type,});if (blob.type "application/json&q…

【源码+文档+调试讲解】重庆旅游景点数据分析系统python

摘 要 重庆旅游景点数据分析系统是一个专门为旅游管理部门和景点运营商设计的信息化工具,它通过集成和分析各种数据来优化景点管理和提升游客体验。该系统能够实时收集游客流量、景点信息、满意度反馈等关键信息,帮助管理者洞察游客行为和市场趋势。系统…

MySQL 中 FIELD() 自定义排序示例详解,实现按照指定顺序排序

在 MySQL 中,你可以使用 ORDER BY FIELD() 来自定义排序顺序。这个函数允许你指定字段的自定义排序顺序 field() 函数:是将查询的结果集按照指定顺序排序 格式: FIELD(str,str1,str2,str3,…) 什么时候用: 想让某几个特定的字段…

Java_Se 数组与数据的存储

数组是相同类型数据的有序集合。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。 数组的四个基本特点: 1.长度是确定的。数组一旦被创建,它的大小就是不可以改变的。 2.其元素…

【JavaSE】-- 类和对象(2)

文章目录 6. 封装6.1 封装的概念6.2 访问限定符6.3 封装拓展之包6.3.1 包的概念6.3.2 导入包中的类6.3.3 自定义包 7. static成员7.1 再谈学生类7.2 static修饰成员变量7.3 static修饰成员方法7.4 static成员变量初始化 8. 代码块8.1 代码块概念以及分类8.2 普通代码块8.3 构造…

关于优化活动页面的大尺寸图片的展示问题

背景 在处理一个对清晰度要求较高的页面时,由于可渲染的图片达到了3840 * 10k的分辨率,所以前端这边在接收到活动页面的图片会相当大(2MB起步的),然后就会出现一个图片缓慢从上到下渲染的过程动画,对于C端…

为电机一体化应用提供一种双通道集成电机驱动方案的电机驱动芯片-SS6811H

电机驱动芯片 - SS6811H为舞台灯光和其它电机一体化应用提供一种双通道集成电机驱动方案。SS6811H是一款双通道H桥驱动芯片;用PWM接口进行控制;具有两个独立的H桥驱动通道,每个H桥可提供较大输出电流1.6A (在24V和Ta 25C适当散热条件下)&…

【转型必看】Java到AI,程序员的逆袭秘籍!

随着技术的不断进步,人工智能(AI)已经成为当今科技领域最热门的话题之一。许多开发者开始考虑从传统的软件开发领域,如Java,转向人工智能领域,今天小编和大家一起来探讨Java开发者是否可以转型到人工智能&a…

神经网络(五):U2Net图像分割网络

文章目录 一、网络结构1.1第一种block结构1.2第二种block结构1.3特征图融合模块1.4损失函数1.5总体网络架构1.6代码汇总1.7普通残差块与RSU对比 二、代码复现 参考论文:U2-Net: Going deeper with nested U-structure for salient object detection   这篇文章基于…

网站建设完成后,国家为什么要求域名备案后才能上线

网站建设完成后,域名备案后才能上线的原因有很多。以下是对这些原因的详细分析: 维护国家互联网安全:备案制度有助于防范网络恐怖分子利用国内网站发布恐怖言论和宣传恐怖活动,从而保护国家的互联网安全。保护用户合法权益&#…

虚拟实训室建设需要投入哪些设备?实际效果如何?

随着虚拟现实技术的飞速发展,虚拟现实实训室作为现代教学的重要组成部分,正逐步成为提升教学质量和学生实践能力的重要手段。本文将从虚拟现实实训室建设所需的软硬件设备投入以及实际效果两个方面进行探讨。 软、硬件设备投入 硬件设备方面,…

Linux高级IO之五种IO模型

文章目录 Linux高级IO之五种IO模型IO的理解阻塞式IO非阻塞IO信号驱动式IOIO多路转接异步IO同步和异步 Linux高级IO之五种IO模型 IO的理解 IO模型其实更像是网络部分的延伸和拓展,在学习完计算机网络之后,结合Linux系统,我们就该认识到&…