【设计模式】第12节:结构型模式之“外观模式”

一、简介

门面模式,也叫外观模式,英文全称是Facade Design Pattern。门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。

目的:简化复杂系统的交互方式

特点:提供一个统一的交互接口

二、UML类图

请添加图片描述

三、案例

以下案例是家庭影院,家庭影院中有各种播放设备,如DVD、音响等,整体对外提供看电影和关闭的功能。

package mainimport "fmt"type Projecter struct {
}func (Projecter) On() {fmt.Println("Turning on the projecter...")
}func (Projecter) Off() {fmt.Println("Turning off the projecter...")
}type DVDPlayer struct {
}func (DVDPlayer) Play() {fmt.Println("Playing the DVDPlayer...")
}func (DVDPlayer) Stop() {fmt.Println("Stopping the DVDPlayer...")
}type SoundSystem struct {
}func (SoundSystem) On() {fmt.Println("Turning on the sound system...")
}func (SoundSystem) Off() {fmt.Println("Turning off the sound system...")
}type HomeTheaterFacade struct {Projecter ProjecterDVDPlayer DVDPlayerSoundSystem SoundSystem
}func NewHomeTheaterFacade(projecter Projecter, dvdPlayer DVDPlayer, soundSystem SoundSystem) HomeTheaterFacade {homeTheaterFacade := HomeTheaterFacade{}homeTheaterFacade.Projecter = projecterhomeTheaterFacade.DVDPlayer = dvdPlayerhomeTheaterFacade.SoundSystem = soundSystemreturn homeTheaterFacade
}func (htf HomeTheaterFacade) WatchMovie() {htf.Projecter.On()htf.DVDPlayer.Play()htf.SoundSystem.On()
}func (htf HomeTheaterFacade) StopMovie() {htf.Projecter.Off()htf.DVDPlayer.Stop()htf.SoundSystem.Off()
}func main() {projecter := Projecter{}dvdPlayer := DVDPlayer{}soundSystem := SoundSystem{}homeTheaterFacade := NewHomeTheaterFacade(projecter, dvdPlayer, soundSystem)homeTheaterFacade.WatchMovie()homeTheaterFacade.StopMovie()
}

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

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

相关文章

人工智能基础_机器学习013_三种梯度下降对比_线性回归梯度下降更新公式_对梯度下降函数求偏导数_得到---人工智能工作笔记0053

这里批量梯度下降,就是用准备的所有样本数据进行梯度下降计算. 然后小批量梯度下降就是使用比如我一共有500个样本,那么我从中拿出50个样本进行梯度下降计算. 然后随机梯度下降,更厉害, 从一共有500个样本中,随机的取一个样本进行梯度下降计算, 首先我们看批量梯度下降,使用…

设计融合_ c#

单例模式 using System; namespace DesignIntegration{ public class TimeManager{ private static TimeManager _instance; private static readonly Object locker new Object(); private TimeManager() { } public static TimeManager…

基于springboot实现游戏分享网站系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现游戏分享网站演示 摘要 网络的广泛应用给生活带来了十分的便利。所以把游戏分享管理与现在网络相结合,利用java技术建设游戏分享网站,实现游戏分享的信息化。则对于进一步提高游戏分享管理发展,丰富游戏分享管理经验能起到…

windows内存取证-中等难度-下篇

上文我们对第一台Target机器进行内存取证,今天我们继续往下学习,内存镜像请从上篇获取,这里不再进行赘述​ Gideon 攻击者访问了“Gideon”,他们向AllSafeCyberSec域控制器窃取文件,他们使用的密码是什么? 攻击者执…

Elasticsearch实战:常见错误及详细解决方案

Elasticsearch实战:常见错误及详细解决方案 1.read_only_allow_delete":“true” 当我们在向某个索引添加一条数据的时候,可能(极少情况)会碰到下面的报错: {"error": {"root_cause": [{&…

Python-文件操作

目录 一、文件的打开与关闭 1、文件的打开 2、文件模式 3、文件的关闭 二、文件的读写 1、写文件 2、读文件 3、文件的定位读写 三、文件的重命名和删除 1、文件的重命名 2、文件的删除 四、文件夹的相关操作 1、创建文件夹 2、获取当前目录 3、改变默认目录 4、…

等你加入!文心开发者说分享者招募全面开启

《文心开发者说》已经开播一个月了,在这段时间里,许多开发者们分享了自己的切身实战经历,了解到作为“先锋”的开发者们对于开发应用的独特心得与见解。 我们期待更多开发者的加入,分享您的开发心得与技巧,对行业动态…

Linux-----nginx的简介,nginx搭载负载均衡以及nginx部署前后端分离项目

目录 nginx的简介 是什么 nginx的特点以及功能 Nginx负载均衡 下载 安装 负载均衡 nginx的简介 是什么 Nginx是一个高性能的开源Web服务器和反向代理服务器。它的设计目标是为了解决C10k问题,即在同一时间内支持上万个并发连接。 Nginx采用事件驱动的异…

1596 - Bug Hunt (UVA)

题目链接如下&#xff1a; https://onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&category448&pageshow_problem&problem4471 我的代码如下&#xff1a; #include <iostream> #include <string> #include <map> // #define…

数据分析在程序员职业中的重要性及实践应用

一、引言 在当今信息化社会的快速发展中&#xff0c;数据分析已经成为一项重要的职业技能。不论是从事哪个行业&#xff0c;都需要具备一定的数据分析能力。对于程序员而言&#xff0c;掌握数据分析技能不仅能够提升自身在职场中的竞争力&#xff0c;更能够在职业生涯中获得更…

JAVA数据类型分类及初始默认值(详细)

前言 在学习Java的时候会接触到数据类型&#xff0c;那么在Java中有哪些数据类型呢&#xff1f; Java数据类型主要分为两大类 1.基本类型&#xff08;primitive type&#xff09;2.引用类型&#xff08;reference type&#xff09; 1.基本类型里分为&#xff1a;数值类型、…

多模态论文学习之ALBEF(Align BEfore Fusing)

ALBEF泛读 TitleLinksMotivationHow to solve it?(Contribution)ModelExperimentsPre-training DatasetsDownstream tasksAblation ExperimentTitle 《Align before Fuse: Vision and Language Representation Learning with Momentum Distillation》 Links Paper地址 M…

Hadoop相关知识点

文章目录 一、主要命令二、配置虚拟机2.1 设置静态ip2.2 修改主机名及映射2.3 修改映射2.4 单机模式2.5 伪分布式2.6 完全分布式 三、初识Hadoop四、三种模式的区别4.1、单机模式与伪分布式模式的区别4.2、特点4.3、配置文件的差异4.3.1、单机模式4.3.2、伪分布式模式4.3.3、完…

平面波向球面波的展开

平面波向球面波的展开是一个极其重要的话题 手稿放在文章的结尾处 勒让德展开 citation 1: 我们整理一下&#xff0c;对exp(x)做泰勒展开&#xff0c;得 citation 2: 我们先把精力集中到解决这个积分上去 反复利用分部积分 考虑到奇偶性问题 当且仅当时积分不为零现在做变换 …

解决Windows Server 2012 由于没有远程桌面授权服务器可以提供需求可证

刚开始提示 之后就登录不了 &#xff08;如下图提示&#xff09; 由于windows server 2012 R2 安装了 远程桌面角色&#xff0c;但是这个角色是120天免费的&#xff0c;需要购买授权的。解决方法是取消/删除这个角色&#xff0c;就可以恢复正常的远程 一直下一步 远程桌面服…

IDEA使用-通过Database面板访问数据库

文章目录 前言操作过程注意事项1.无法下载驱动2.“Database”面板不显示数据库表总结前言 作为一款强大IDE工具,IDEA具有很多功能,本文将以MariaDB数据库访问为例,详细介绍如何通过IDE工具的Database面板来访问数据库。 操作过程 不同的版本操作会略有差异,这里我们用于演…

代码随想录Day41-图论:力扣第797m、200m、695m、1020m、130m题

797m. 所有可能的路径 题目链接 代码随想录文章讲解链接 方法一&#xff1a;DFS 用时&#xff1a;11m43s 思路 时间复杂度&#xff1a; O ( n ⋅ 2 n ) O(n \cdot 2^n) O(n⋅2n)&#xff0c;n是节点个数&#xff0c;最坏情况每个节点都可以去往任意一个在它后面的节点&…

【JavaScript保姆级教程】switch分支与while循环

文章目录 前言一、Switch分支1.1 switch基本结构1.2 break语句1.3 default标签1.4 下面是几个Switch分支的示例代码&#xff1a;示例1: 根据星期数输出对应的中文星期名称示例2: 根据用户输入的颜色选择执行不同的操作 二、While循环&#xff1a;2.1 while循环基本格式2.2 cont…

一文速通Sentinel熔断及降级规则

目录 基本介绍 熔断模式 状态机的三个状态 熔断降级规则 断路器熔断策略 慢调用 异常比例 异常数 基本介绍 熔断模式 主要是参考电路熔断&#xff0c;如果一条线路电压过高&#xff0c;保险丝会熔断&#xff0c;防止火灾。放到我们的系统中&#xff0c;如果某个目标…

MPI并行计算的基本介绍和使用

文章目录 MPI基本概念一般实现操作分类基本语句windows下使用Microsoft MPI 示例 点对点通信标准通信缓存通信同步通信就绪通信 MPI组通信广播 - 一对多收集散发组收集归约(reduce)归约并散发 MPI 基本概念 MPI(Message Passin Interface 消息传递接口)是一种消息传递编程模型…