深入理解设计模式之门面模式

chatgpt/2023/9/24 0:53:48

深入理解设计模式之门面模式

什么是门面模式?

门面模式(Facade Pattern)是一种结构型设计模式,它提供了一个简单的接口,用于访问复杂子系统中的一组接口。门面模式通过封装子系统的复杂性,提供了一个更简单、更易于使用的接口给客户端。

  • 门面类:封装了子系统的一组接口,并提供一个简单的接口给客户端使用
  • 子系统类:一个或多个,实现子系统的各个接口和功能

为什么要使用门面模式?

在软件开发中,经常会遇到复杂的系统,其中包含了多个子系统和接口。直接使用这些子系统和接口可能会导致代码的复杂性增加,难以维护和理解。而门面模式可以将这些复杂性隐藏在一个门面类中,提供一个简单的接口给客户端使用。使用门面模式可以带来以下好处:

  1. 简化客户端代码门面模式将复杂的子系统封装起来,客户端只需要与门面类进行交互,不需要了解子系统的复杂性,从而简化了客户端代码
  2. 解耦客户端和子系统门面模式将客户端与子系统之间的耦合度降低,客户端只需要依赖门面类,而不需要直接依赖子系统,从而提高了代码的灵活性和可维护性
  3. 提高代码的可读性门面模式将复杂的子系统封装在一个门面类中,使得代码更加清晰和易于理解

如何使用门面模式?

使用门面模式的步骤如下:

  1. 定义门面类: 创建一个门面类,该类封装了子系统的一组接口,并提供一个简单的接口给客户端使用。
  2. 实现子系统: 实现子系统的各个接口和功能。
  3. 在门面类中调用子系统: 在门面类中调用子系统的接口,将复杂的子系统逻辑封装起来。
  4. 客户端使用门面类: 客户端只需要与门面类进行交互,不需要了解子系统的复杂性。

下面是一个简单的示例代码,演示了如何使用门面模式来简化复杂系统的访问:

案例:我现在要出趟远门,出门前需把所有电器(冰箱、电视、空调…)断电,使用门面模式后我们可以一键将所有电器断电。
在这里插入图片描述

  • 门面类:电闸
  • 子系统:冰箱、电视、空调…
// 子系统类 - 冰箱
class Refrigerator {public void turnOff() {System.out.println("冰箱已断电");}
}// 子系统类 - 电视
class Television {public void turnOff() {System.out.println("电视已断电");}
}// 子系统类 - 空调
class AirConditioner {public void turnOff() {System.out.println("空调已断电");}
}// 门面类 - 门面(Facade)- 相当于电闸
class Facade {private Refrigerator refrigerator;private Television television;private AirConditioner airConditioner;public Facade() {refrigerator = new Refrigerator();television = new Television();airConditioner = new AirConditioner();}public void turnOffAllDevices() {refrigerator.turnOff();television.turnOff();airConditioner.turnOff();}
}

客户端

// 客户端代码
public class Client {public static void main(String[] args) {// 不使用门面模式,一个一个调用,非常麻烦...Refrigerator refrigerator = new Refrigerator();Television television = new Television();AirConditioner airConditioner = new AirConditioner();refrigerator.turnOff();television.turnOff();airConditioner.turnOff();System.out.println("------------使用门面模式--------------");// 使用门面模式后,一次即可Facade facade = new Facade();facade.turnOffAllDevices();}
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

语音转录成文本:AI Transcription for mac

AI Transcription是一种人工智能技术,它可以将音频和视频文件转换成文本格式。这种技术可以帮助用户快速地将大量的音频和视频内容转换成文本格式,方便用户进行文本分析、搜索和编辑等操作。 以下是AI Transcription的几个特点: 高效性。AI …

【C语言day12】

#include<stdio.h>int main() {char c A;//65if (0 < c < 9) printf("YES");else printf("NO");return 0; }‘0’<c<‘9’ 并非判断x大于等于字符0,小于等于字符9&#xff0c;而是先执行’0’<c&#xff0c;使用这个表达式的结果再和…

Web3Space空间梅州站盛大开业:探索web3.0新时代的无限可能!

7月28日&#xff0c;Web3Space空间梅州站在广东省梅州市区盛大开业。 在互联网3.0时代&#xff0c;社会的生产关系与生产力都将发生变革&#xff0c;企业与个体都将拥抱数字化时代。可以预见未来企业的组织形态将会由过往的庞然大物”转向无数个小而美的“超级个体"。而We…

基于react18+hooks通用全局手机端弹框组件

RcPop 基于react18.x hooks自定义msg/alert/dialog/model/toast弹框组件 基于react18 hook开发全局通用mobile弹层组件。整合了msg/alert/dialog/toast及android/ios等弹窗效果。支持**20**参数、组件式函数式两种调用方式。 引入弹窗组件 在需要使用到弹窗的页面引入组件。 …

Arcgis通过模型构建器计算几何坐标

模型 模型中&#xff0c;先添加字段&#xff0c;再计算字段 计算字段 模型的计算字段中&#xff0c;表达式是类似这样写的&#xff0c;其中Xmin表示X坐标&#xff0c;Ymin表示Y坐标 !Shape.extent.Xmin!类似计算面积 !shape.area!

stm32 mpu6050 cubemx DMP法读取角度

文章目录 前言一、相关文件二、cubemx配置三、代码变量初始化主循环 总结 前言 文件 记录使用dmp库来读取mpu6050的角度。 这是参考文件 参考1–主要参考 github参考 参考2 参考三 一、相关文件 相关文件在这里下载&#xff08;未填&#xff0c;不过可以在上面的git中下载&a…

超前端相关的学习网站和一些靠谱的小工具

CSS相关 1. CSS Battle - 在线比拼 CSS https://cssbattle.dev 在线比拼 CSS &#xff0c;一个挺有趣的竞争性游戏&#xff0c;一共有12个级别&#xff0c;需要你用 HTML和 CSS 100%还原它给出的页面&#xff0c;然后再尽量减少代码&#xff0c;你也可以查看全球的排行榜&am…

windows端口占用

1.查看当前端口被哪个进程占用了&#xff08;进入到CMD中&#xff09; netstat -ano|findstr "8990"输出结果为&#xff1a; TCP 127.0.0.1:8990 0.0.0.0:0 LISTENING 2700 我们发现8990端口被2700进程占用了 2.基于进程号找进程名称 tasklist|findstr "2700&qu…
推荐文章