23种设计模式之外观模式(Facade Pattern)

news2024/11/16 17:31:17

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的外观模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞
在这里插入图片描述

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,在一家满意的公司实习👏👏

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

以下正文开始
在这里插入图片描述

文章目录

  • 外观模式概念
  • 外观模式角色
  • 外观模式优缺点
  • 外观模式代码案例
  • 外观模式小结

外观模式概念

外观模式(Facade Pattern)是一种结构型设计模式,它为子系统提供一个统一的、简单的接口,隐藏子系统的复杂性,使客户端代码更加容易使用

在外观模式中,我们创建一个外观类,该类包含子系统中各个模块的实例,客户端代码只需要与外观类交互,而不需要直接与子系统内部的各个模块交互。这样可以降低客户端代码的复杂度,并且可以让子系统内部的变化对客户端代码的影响降到最小

外观模式角色

外观模式由三个角色组成:

外观类(Facade):它是客户端和子系统之间的中介,它封装了子系统的复杂性,并提供一个简单的接口给客户端使用。

子系统类(Sub System):实现子系统的功能,由多个模块组成,可以是一个或多个类。

客户端(Client):使用外观模式的代码。

外观模式优缺点

外观模式的优点包括:

  • 简化客户端代码:客户端不需要了解子系统的内部结构,可以通过外观类来调用系统的功能,从而降低了客户端的复杂度。

  • 解耦合:外观类作为中介,将客户端代码和子系统内部的各个模块分离开来,可以使得子系统内部的变化对客户端代码的影响降到最小。

  • 提高灵活性:由于外观类封装了子系统的复杂性,因此可以随时更改和升级子系统中的模块,而不需要修改客户端代码。

但是,外观模式也有一些缺点:

  • 可能会导致系统过度简化:如果外观类设计得过于简单,可能会导致系统的功能过于单一,而丧失灵活性。

  • 不符合开闭原则:如果需要增加、修改或删除子系统中的模块,可能需要修改外观类的接口,然后再修改客户端代码。

外观模式代码案例

下面我们通过一个代码案例来学习设计模式:

首先,假设我们正在开发一个DVD播放器应用程序,它由多个子系统组成,如音频、视频和用户界面等。每个子系统都有独立的逻辑,而且彼此之间也有关联。现在,我们需要实现一个简单的外观类,用于封装这些不同的子系统,使得客户端可以更加方便地操作DVD播放器。

定义子系统:音频、视频和UI

public class Audio {
    public void on() {
        System.out.println("音频已打开");
    }

    public void off() {
        System.out.println("音频已关闭");
    }
}

public class Video {
    public void on() {
        System.out.println("视频已打开");
    }

    public void off() {
        System.out.println("视频已关闭");
    }
}

public class UserInterface {
    public void on() {
        System.out.println("用户界面已打开");
    }

    public void off() {
        System.out.println("用户界面已关闭");
    }
}

实现外观类:MediaPlayerFacade

public class MediaPlayerFacade {
    private Audio audio;
    private Video video;
    private UserInterface ui;

    public MediaPlayerFacade() {
        audio = new Audio();
        video = new Video();
        ui = new UserInterface();
    }

    public void play() {
        audio.on();
        video.on();
        ui.on();
    }

    public void stop() {
        audio.off();
        video.off();
        ui.off();
    }
}

在上面的代码中,MediaPlayerFacade 是外观类。它拥有三个子系统实例,即 audio、video 和 ui。play()和stop() 方法是外观类提供给客户端的简单接口,用于启动或关闭 DVD 播放器。

在客户端中使用外观类

java
public class Client {
    public static void main(String[] args) {
        MediaPlayerFacade player = new MediaPlayerFacade();
        player.play();

        // 中途停止播放
        player.stop();
    }
}

在上面的代码中,我们创建了一个 MediaPlayerFacade 类的实例对象 player,并调用了其 play() 方法启动 DVD 播放器,并在中途进行了停止操作。

外观模式小结

通过以上代码案例,我们可以看到外观模式的具体实现方法:我们首先定义好子系统,然后封装这些子系统到一个外观类中,并为其提供一个简单的接口,从而使得客户端能够更方便地使用这些子系统。在外观类中,我们并不会涉及到子系统的具体实现细节,只是对其进行了简单的封装。这样,当需要修改子系统时,我们只需要修改外观类代码即可,而无需关心如何修改各个子系统实现类的代码

好了,本篇文章就先分享到这里了,后续将会继续介绍23种设计模式之其他模式,感谢大佬认真读完支持咯~
在这里插入图片描述

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论😁
希望能和诸佬们一起努力,今后我们顶峰相见🍻
再次感谢各位小伙伴儿们的支持🤞

在这里插入图片描述

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

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

相关文章

云从科技从容大模型:大模型和AI平台什么关系?为什么造行业大模型?

原创:亲爱的数据 2023年5月18日,坐标广州南沙,来自云从科技的“云从从容大模型”正式亮相。 自此,云从科技从CV四小龙“进阶”成为一家AI大模型公司,同时,别忘记云从还有一个身份常被人提起:首家…

纯虚函数与抽象类

纯虚函数与抽象类 虚析构函数状态转换的引入C中的状态转换C中的状态转换职责链模式 纯虚函数和虚基类使用规则实例接口继承和实现继承 虚析构函数 在上一次博客中写到了这么一段代码: class object { private: int value;public:object(int x 0) : value(x) {}~o…

嵌入式音视频开发过程中如何控制码率?

一、码率控制的意义: 在音视频领域,码率控制模式有着举足轻重的地位。那什么是码率控制?码率控制是指通过调节图像的压缩比例,从而决定输出编码码率的过程。 二、H264有多少种码率控制模式: H264码率控制模式分别有&am…

DailyMart01:一点小想法,一个新的开始!

大家好呀,我是飘渺! 截至目前,我已在公众号和知识星球上发布了多个系列文章,涵盖了SpringBoot老鸟系列、SpringCloud微服务系列、运维监控系列、分库分表系列和Kubernetes云原生系列。尽管每个系列的重点各有不同,它们…

【MYSQL】事务的4大属性,对隔离级别的详细讲解

目录 1.原子性和持久性 1.1.手动提交事务 1.2.自动提交事务 1.3.事务的原理: 2.隔离性 1.读未提交(Read Uncommitted) 2.读提交(Read Committed) 3.可重复读 4.串行化 3.一致性 4.理解读提交和可重复读的实现…

iptables

目录 iptables概述 netfilter/iptables 关系: 四表五链 四表: 五链: 数据包到达防火墙时,规则表之间的优先顺序: 规则链之间的匹配顺序: 主机型防火墙: 网络型防火墙: ipta…

Uart,RS232,RS485串口通讯协议学习

目录 定义 UART(通常被称为串口,简单意味着使用广泛,具有普适性) RS232 RS232电平转换 RS485 -Recommended Standard (再推荐标准) 485和232的对比 RS485组网 总结 定义 串口是我们都很熟悉的,尤其是需要串口调试的时候,打印信息插…

C语言函数大全-- _w 开头的函数(4)

C语言函数大全 本篇介绍C语言函数大全-- _w 开头的函数 1. _wstrtime 1.1 函数说明 函数声明函数功能wchar_t *_wstrtime(wchar_t *buffer);用于获取当前系统时间并返回一个宽字符字符串表示,格式为 "HH:MM:SS"(小时:分钟:秒) …

2023 Vue开发者的React入门

Vue 和 React 都是流行的 JavaScript 框架,它们在组件化、数据绑定等方面有很多相似之处 本文默认已有现代前端开发(Vue)背景,关于 组件化、前端路由、状态管理 概念不会过多介绍 0基础建议详细阅读 Thinking in React-官方文档 了解 React 的设计哲学 R…

彻底理解粘性定位 - position: sticky(IT枫斗者)

彻底理解粘性定位 - position: sticky 介绍 粘性定位可以被认为是相对定位(position: relative)和固定定位(position: fixed)的混合。元素在跨越特定阈值前为相对定位,之后为固定定位。例如: .sticky-header { position: sticky; top: 10px; }在 视口滚动到元素…

【JavaWeb】--05.Request和Response、JSP、会话技术

文章目录 Request和Response1.概述2.Request对象2.1 Request继承体系2.2Request获取请求数据2.3 IDEA创建Servlet2.4 请求参数中文乱码问题POST请求解决方案GET请求解决方案 2.5 Request请求转发 3.Response对象3.1 Response设置响应数据功能介绍3.2 Response请求重定向3.3 路径…

【全网首测】5G随身Wi-Fi —— 中兴U50 Pro

说到随身Wi-Fi,大家应该都不陌生。 它是一个专门将移动信号转换成Wi-Fi信号的设备,经常被用于旅行和出差场景,也被人们亲切地称为“上网宝”。 现在,我们已经全面进入了5G时代,随身Wi-Fi也升级迭代,出现了支…

人工智能的界面革命,消费者与企业互动的方式即将发生变化。

本文来源于 digitalnative.substack.com/p/ais-interface-revolution 描述了一种社会现象: 随着真实友谊的减少和虚拟友谊的增加,越来越多的人开始将AI聊天机器人视为自己的朋友,甚至建立了深厚的情感纽带。这可能与当前人们越来越孤独的现实…

面向“伙伴+华为”体系,华为产品力的变与不变

在日前举办的“华为中国合作伙伴大会2023”上,华为面向政企市场提出了建设“伙伴华为”体系的发展方向。可想而知,接下来会有更多伙伴加入这一体系,也会有更多客户可以借由这个体系加速完成自身的数字化转型和智能化升级。而产品与技术&#…

luaplus Windows编译(一)

前言 LuaPlus是Lua的C增强,也就是说,LuaPlus本身就是在Lua的源码上进行增强得来的。用它与C进行合作,是比较好的一个选择。 1:准备 luaplus_all 下载地址:https://github.com/jjensen/luaplus51-all jamplus 下载地址 https://gi…

基于神经网络算法的鱼类迁徙轨迹拟合研究

本试验采用HTI Model 291便携型声学标签接收系统,包括的基本部件有:291便携型声学标签接收器1台,590型水听器4根,最新795型声学标签40枚,490-LP 型标签编程器1台,690系列电缆400m,492微型声学标签探测器1台,115VAC型滤波器1台,TagProgrammer 、MarkTags和AcousticTag专…

30个数据科学工作中最常用的 Python 包

Python 可以说是最容易入门的编程语言,在numpy,scipy等基础包的帮助下,对于数据的处理和机器学习来说Python可以说是目前最好的语言。 在各位大佬和热心贡献者的帮助下Python拥有一个庞大的社区支持技术发展,开发两个各种 Python…

Oracle中数据导出成HTML的操作实践

spool是Oracle中将数据到成文件常用的一种工具,但它的强大,不仅仅是数据的导出,在格式和内容上,还可以自定义,甚至生成像AWR一样的统计报告。 参考《SQL*Plus Users Guide and Reference》中第7章"Generating HTM…

光纤仿真相关求解——光纤芯层和包层电磁场分布求解

要求解光纤中的电磁场分布,就要构建合适的物理模型 将光纤假设为圆柱状的波导,求解满足均匀原型介质波导边界条件的麦克斯韦方程组,即可 z分量的亥姆霍兹方程为: 对应在圆柱坐标系下为: 用分离变量法求解Ez&#xff…

如果你不想工作了,先做这3件事

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 英国作家毛姆有句名言:“我从来不会厌倦生活,只是厌倦了那些毫无生气的生活方式。”把这句话稍微修改一下,放在职场也无比适用“我并不厌倦工作,只是厌倦了那些毫无…