《HeadFirst设计模式(第二版)》第七章代码——外观模式
代码文件目录:

Subsystem:
Amplifier
package Chapter7_AdapterAndFacadePattern.FacadePattern.Subsystem;/*** @Author 竹心* @Date 2023/8/8**///扬声器
public class Amplifier {int volume = 0;//音量public void on(){System.out.println("The amplifier is on!");}public void off(){System.out.println("The amplifier is off!");}public void setStreamingPlayer(){System.out.println("The amplifier setting to streamingPlayer mode!");}public void setVolume(int volume) {System.out.println("The amplifier volume is set to 5!");this.volume = volume;}public void setSurroundSound(){System.out.println("The amplifier is set to SurroundSound mode");}@Overridepublic String toString() {return "Amplifier{" +"volume=" + volume +'}';}
}
PopcornPopper
package Chapter7_AdapterAndFacadePattern.FacadePattern.Subsystem;/*** @Author 竹心* @Date 2023/8/8**/public class PopcornPopper {public void on(){System.out.println("The popcorn popper is on!");}public void off(){System.out.println("The popcorn popper is off!");}public void pop(){System.out.println("The popcorn popper is popping!");}@Overridepublic String toString() {return this.getClass().getSimpleName();}
}
Projector
package Chapter7_AdapterAndFacadePattern.FacadePattern.Subsystem;/*** @Author 竹心* @Date 2023/8/8**///投影仪
public class Projector {public void on(){System.out.println("The Projector is on!");}public void off(){System.out.println("The Projector is off!");}public void WideScreenMode(){System.out.println("The Projector is in WideScreenMode!");}@Overridepublic String toString() {return this.getClass().getSimpleName();}
}
Screen
package Chapter7_AdapterAndFacadePattern.FacadePattern.Subsystem;/*** @Author 竹心* @Date 2023/8/8**/public class Screen {public void up(){System.out.println("The screen going up!");}public void down(){System.out.println("The screen going down!");}@Overridepublic String toString() {return this.getClass().getSimpleName();}
}
StreamPlayer
package Chapter7_AdapterAndFacadePattern.FacadePattern.Subsystem;/*** @Author 竹心* @Date 2023/8/8**/public class StreamPlayer {String movie;public void on(){System.out.println("The StreamPlayer is on!");}public void off(){System.out.println("The StreamPlayer is off!");}public void pause(){System.out.println("The StreamPlayer is pausing!");}public void play(String movie){this.movie= movie;System.out.println("The StreamPlayer is playing the "+this.movie);}public void stop(){System.out.println("The StreamPlayer stops!");}@Overridepublic String toString() {return this.getClass().getSimpleName();}
}
TheaterLights
package Chapter7_AdapterAndFacadePattern.FacadePattern.Subsystem;/*** @Author 竹心* @Date 2023/8/8**/public class TheaterLights {public void on(){System.out.println("The theater lights are on!");}public void off(){System.out.println("The theater lights are off!");}public void dim(){//这里偷懒不将灯的亮度设置为属性了System.out.println("The theater lights are dimming to 10%");}@Overridepublic String toString() {return this.getClass().getSimpleName();}
}
HomeTheaterFacade
package Chapter7_AdapterAndFacadePattern.FacadePattern;import Chapter7_AdapterAndFacadePattern.FacadePattern.Subsystem.*;/*** @Author 竹心* @Date 2023/8/8**/public class HomeTheaterFacade {Amplifier amp;StreamPlayer player;Projector projector;TheaterLights lights;Screen screen;PopcornPopper popper;public HomeTheaterFacade(Amplifier amp,StreamPlayer player,Projector projector,TheaterLights lights,Screen screen,PopcornPopper popper) {this.amp = amp;this.player = player;this.projector = projector;this.lights = lights;this.screen = screen;this.popper = popper;}public void watchMovie(String movie){System.out.println("Get ready to watch a movie!");this.popper.on();this.popper.pop();this.lights.on();this.lights.dim();this.screen.down();this.projector.on();this.projector.WideScreenMode();this.amp.on();this.amp.setStreamingPlayer();this.amp.setSurroundSound();this.amp.setVolume(5);this.player.on();this.player.play(movie);System.out.println("Now, enjoy the movie!\n\n");}public void endMovie(){System.out.println("Shutting movie theater down!");this.popper.off();this.player.stop();this.player.off();this.amp.off();this.projector.off();this.screen.up();this.lights.off();}
}
HomeTheaterTestDrive
package Chapter7_AdapterAndFacadePattern.FacadePattern;import Chapter7_AdapterAndFacadePattern.FacadePattern.Subsystem.*;/*** @Author 竹心* @Date 2023/8/8**/public class HomeTheaterTestDrive {public static void main(String[] args) {Amplifier amplifier = new Amplifier();StreamPlayer streamPlayer = new StreamPlayer();Projector projector = new Projector();PopcornPopper popper = new PopcornPopper();TheaterLights lights = new TheaterLights();Screen screen = new Screen();HomeTheaterFacade homeTheater = new HomeTheaterFacade(amplifier,streamPlayer,projector,lights,screen,popper);homeTheater.watchMovie("Titanic");homeTheater.endMovie();}
}
notes.txt
外观模式:为子系统中的一组接口提供统一的接口。外观定义了一个更高级别的接口,使得子系统更容易被使用当用户类要通过调用一系列的组件类的接口来实现某个最终的目的的时候,可以将这些组件类的接口统合在一起,形成一个新的接口,然后客户直接调用该接口,实现解耦合。最少知识原则:一个对象只调用这些方法:对象自身的、作为参数传给方法发对象的、该方法创建或者实例化的任何对象、对象的任何组件。比如:1. return this.car.start(); 可以2. return this.car.engine.start(); 不可以优缺点:一方面减少耦合度,减低维护成本;另一方面会使得“包装者”类增加,造成复杂度和开发时间增加同时还会降低运行时的性能。
相关文章:
《HeadFirst设计模式(第二版)》第七章代码——外观模式
代码文件目录: Subsystem: Amplifier package Chapter7_AdapterAndFacadePattern.FacadePattern.Subsystem;/*** Author 竹心* Date 2023/8/8**///扬声器 public class Amplifier {int volume 0;//音量public void on(){System.out.println("The amplifier …...
前端杂项-个人总结八股文的背诵方案
个人总结八股文的背诵方案 URL到显示网页的过程 浏览器解析URL,获取协议,主机名,端口号,路径等信息,并通过DNS查询将主机名转换为对应的IP地址浏览器与服务器建立TCP,进行三次握手。浏览器向服务器发送HT…...
利用 3D 地理空间数据实现Cesium的沉浸式环境
推荐:使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景 为了将大量异构 3D 地理空间数据处理和分散到各行各业的地理空间应用程序和运行时引擎,Cesium 创建了 3D Tiles,这是一种用于高效流式传输和渲染大量异构数据集的开放标准。3D Tile…...
微服务——ES实现自动补全
效果展示 在搜索框根据拼音首字母进行提示 拼音分词器 和IK中文分词器一样的用法,按照下面的顺序执行。 # 进入容器内部 docker exec -it elasticsearch /bin/bash# 在线下载并安装 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch…...
北斗+5G 织就精确定位的“天罗地网”
今年,邓中亮更忙了。 外部会议,内部讨论,课题研究,还有疫情困扰期间没能出的差铆足劲似的补上,一天里,从离开床和回到床中间的时间都被工作冠名了。 北京邮电大学教授邓中亮 忙碌的加速键在2020年按下暂停…...
Ansible Roles详解
Ansible 的角色(Roles)是一种组织和管理任务和变量的方法,可以帮助您更好地组织和重用 Ansible 代码。角色是一个可重用的、自包含的 Ansible 单元,它封装了一组任务和变量,可以在不同的剧本中轻松地重用。 角色的目录…...
微服务学习笔记-基本概念
微服务是一种经过良好架构设计的分布式架构方案。根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。 微服务的架构特征: 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力&…...
Linux查看GPU显卡/CPU内存/硬盘信息
显卡信息命令/CPU内存/硬盘 1.显卡2、CPU内存3、硬盘 1.显卡 nvidia-smi nvidia-smi(显示一次当前GPU占用情况) nvidia-smi -l(每秒刷新一次并显示) watch -n 5 nvidia-smi (其中,5表示每隔6秒刷新一次终端…...
SQLAlchemy 入门:Python 中的 SQL 工具包和 ORM
SQLAlchemy 是 Python 中一款非常流行的数据库工具包,它对底层的数据库操作提供了高层次的抽象。在本篇文章中,我们将介绍 SQLAlchemy 的两个主要组成部分:SQL 工具包 (SQL Toolkit) 和对象关系映射器 (Object-Relational Mapper, ORM) 的基本…...
react Hook+antd封装一个优雅的弹窗组件
前言 在之前学vue2的时候封装过一个全局的弹窗组件,可以全局任意地方通过this调用,这次大创项目是用react技术栈,看了一下项目需求,突然发现弹窗还是比较多的,主要分为基础的弹窗以及form表单式的弹窗,如果…...
HICP学习--BGP综合小实验
需要完善 一、实验拓扑 二、实验需求 1、R2-7每台路由器均存在一个环回接口用于建立邻居,同时还存在一个环回来代表连接用户的接口;最终这些连接用户的接口网络需要可以和R1/8的环回通讯 2、AS2网段地址172.16.0.0/16 减路由条目数量 三、实验步骤 首先配置IP R…...
grafana中利用变量来添加dashboard详情页地址实现点击跳转
背景 最近弄grafana的dashboard,突然想到各个dashboard之前可以直接跳转到不同详细页面的面板,于是找了找实现方法 实现 以stat 格式的面板为例,显示出各个pod的对应状态, PromQL是(avg(kube_pod_status_phase{phase"Running", namespace!"kube-system"…...
正则表达式练习
正则表达式练习 工具目的代码运行结果 工具 pycharm 目的 https://www.77xsw.cc/fenlei/1_1/:第一页的网址 https://www.77xsw.cc/fenlei/1_2/:第二页的网址 ... https://www.77xsw.cc/fenlei/1_10/:第十页的网址 代码 import requests im…...
leetcode做题笔记73矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 思路一:记录行列值 void setZeroes(int** matrix, int matrixSize, int* matrixColSize){int row[matrixSize],col[*matrixColSize];fo…...
【2.1】Java微服务: Nacos的使用
目录 Nacos介绍 Nacos安装 下载和安装 修改端口 启动 服务注册与发现 导入Nacos管理依赖 导入服务依赖 配置Nacos的服务地址 启动服务,查看已注册的服务 服务分级存储模型 分级存储模型介绍 具体结构 配置实例集群 同集群优先的负载均衡策略 服务权重配置…...
vue安装及环境配置
vue安装及环境配置 1.安装 Node.js 2.配置默认安装目录和缓存日志目录 3.配置环境变量 4.配置淘宝镜像 5.安装vue和脚手架 6.创建并运行项目 1.安装 Node.js Download | Node.js 在这里👆下载的是最新版,如果要安装以前的版本👇&…...
java使用正则表达式时遇到的问题
标准的正则表达式是什么样的 Node.js(JavaScript) 在正则表达式中,斜杠(/)用来表示正则表达式的开始和结束。在JavaScript中,正则表达式可以使用斜杠包裹起来,以表示这是一个正则表达式的字面量。 在Node.js中&…...
Git介绍及常用命令详解
一、Git的概述 Git是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。 Git 会跟踪我们对文件所做的更改,因此我们可以记录已完成的工作,并且可以在需要时恢复到特定或以前的版本。Git 还使多人协作变得更加容易&…...
赛事 | 第25届中国机器人及人工智能大赛全国决赛榜单发布
第25届中国机器人及人工智能大赛成功举办 2023年6月13日至14日,第二十五届中国机器人及人工智能大赛于海南科技职业大学成功举办。大赛由中国人工智能学会主办,共有来自清华大学、哈尔滨工业大学、中国科学技术大学、西安交通大学等500多所高校进入全国…...
JavaScript+Asp.Net MVC5同时下载多个文件
前端同时启动多个下载任务(但是没有做压缩包下载) 前端JavaScript脚本: var idList [1,2,3];//要下载的列表 $.each(idList, function (index, item) {downloadURL("/File/GetPdf?id" item); });var count 0; var downloadUR…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
Java中栈的多种实现类详解
Java中栈的多种实现类详解:Stack、LinkedList与ArrayDeque全方位对比 前言一、Stack类——Java最早的栈实现1.1 Stack类简介1.2 常用方法1.3 优缺点分析 二、LinkedList类——灵活的双端链表2.1 LinkedList类简介2.2 常用方法2.3 优缺点分析 三、ArrayDeque类——高…...
运行vue项目报错 errors and 0 warnings potentially fixable with the `--fix` option.
报错 找到package.json文件 找到这个修改成 "lint": "eslint --fix --ext .js,.vue src" 为elsint有配置结尾换行符,最后运行:npm run lint --fix...
