java设计模式(十)外观模式(Facade Pattern)

1、模式介绍:

外观模式是一种结构型设计模式,提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,使得子系统更容易使用。

2、应用场景:

当你希望为复杂的子系统提供一个简单接口时。
当客户端与多个子系统之间存在很大依赖性时,引入外观模式可以将客户端与子系统解耦,从而提高灵活性和可维护性。

3、优点:

简化了客户端与子系统之间的交互,客户端只需要通过外观类访问子系统,不需要了解子系统的具体细节。
减少了客户端对子系统的依赖,降低了耦合度。
更好地划分了访问层次,符合迪米特法则(最少知识原则)。

4、缺点:

如果设计不当,增加新的子系统可能需要修改外观类或者客户端代码,违反开闭原则。

5、代码实现:

/*** CPU处理** @author FM_南风* @date 2024/7/2*/
public class CPU {public void freeze() {System.out.println("freeze");}public void jump(long position) { System.out.println("jump"+position); }public void execute() {System.out.println("execute");}
}/*** 硬件处理** @author FM_南风* @date 2024/7/2*/
public class HardDrive {public byte[] read(long len, int size) {System.out.println("len:"+len);System.out.println("size:"+size);return null;}
}/*** 内存处理** @author FM_南风* @date 2024/7/2*/
public class Memory {public void load(long position, byte[] data) {System.out.println("position:"+position);System.out.println("data:"+data);}
}/*** 外观类应用** @author FM_南风* @date 2024/7/2*/
public class ComputerFacade {private final CPU cpu;private final Memory memory;private final HardDrive hardDrive;public ComputerFacade() {this.cpu = new CPU();this.memory = new Memory();this.hardDrive = new HardDrive();}public void start() {cpu.freeze();memory.load(1L, hardDrive.read(2L, 3));cpu.jump(1L);cpu.execute();}public static void main(String[] args) {ComputerFacade computer = new ComputerFacade();computer.start();}
}

6、结果展示:

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

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

相关文章

win系统安装ssh服务端,实现通过ssh连接win系统,进行文件传输等

文章目录 前言win系统通过PowerShell安装OpenSSH Server1. 打开PowerShell:2. 检查可用的OpenSSH组件:3. 安装OpenSSH Server:4. 启动并设置OpenSSH Server服务:5. 配置防火墙: 确认OpenSSH Server已安装并运行1. 检查…

【2024年世界人工智能大会】AI新航向:从“卷模型”到“卷应用”的深度探索

在2024年世界人工智能大会的璀璨舞台上,李彦宏的一席话犹如明灯,照亮了AI技术发展的新路径——“不要卷模型,要卷应用”。这不仅仅是对当前AI领域热潮的冷静反思,更是对未来发展方向的深刻洞察。 AI技术应用场景:从理…

电脑数据恢复篇:如何从电脑中恢复已删除的照片

按下 Shift Delete 后后悔了?想要恢复已删除的照片?好吧,如果是这样的话,你来对地方了。在本文中,我们将讨论如何从 PC 中恢复已删除的文件。 自从摄影的概念被提出以来,人们就对它着迷。以前&#xff0c…

操作系统面试八股文

1.进程,线程和协程的区别和联系 进程,线程和协程是计算机中多任务处理的三种不同的概念。 进程:进程是操作系统中的一个概念,是系统中资源分配的基本单位。每个进程有独立的内存空间、程序和数据。进程之间需要通过进程间通信来实…

地下城游戏中都有哪些类型的服务器?

地下城类型的服务器以其独特的魅力吸引了众多玩家。这些服务器通常基于流行的地下城探险游戏,如《Minecraft》的地下城模式或《Dungeon Fighter Online》等,提供了丰富多样的游戏体验。下面,我们将探讨几种不同类型的地下城服务器及其特点。 …

进制的概念以及进制转换和计算

文章目录 1. 进制 十六进制(Hexadecimal) 十进制(Decimal) 八进制(Octal) 二进制(Binary) 示例 2. 进制转换表 3. 十六进制与二进制转换 4. 十进制与二进制的转换 5. 十进…

中国各省金融监管水平-测算数据(2006-2022年)

金融监管水平是指政府及其指定机构通过法律法规对金融机构及其市场行为进行监督、管理与规范的能力和效率,以维护金融体系稳定、保护投资者和消费者权益、促进公平竞争及支持经济增长。衡量金融监管水平的指标多样,常见的一种计算方式是金融监管支出与金…

[AI 大模型] Google Gemini

文章目录 [AI 大模型] Gemini简介模型架构发展新技术和优势示例 [AI 大模型] Gemini 简介 Google Gemini 是 Google 最新推出的多模态 AI 大模型,旨在提升 AI 在各个领域的应用能力。Gemini 能够处理文本、图像、音频、视频和代码等多种数据类型,展现出…

模拟考试小程序的设计

管理员账户功能包括:系统首页,个人中心,科目管理,复习资料管理,参考文献管理,用户管理,留言板管理,论坛管理 微信端账号功能包括:系统首页,复习资料&#xf…

128陷阱详解(从源码分析)

1、128陷阱描述 Integer 整型 -128~127 超过这个范围,比较会不准确 例子 public static void main(String[] args) {Integer a128;Integer b128;Integer e127;Integer f127;System.out.println(ab); //输出falseSystem.out.println(a.equals(b)); //输出trueS…

PCI DSS是什么?

PCI DSS,全称为Payment Card Industry Data Security Standard(支付卡行业数据安全标准),是由支付卡行业安全标准委员会(PCI Security Standards Council)制定的一套安全标准,旨在保护信用卡信息…

深入解析网络爬虫技术:从入门到进阶

目录 引言什么是网络爬虫网络爬虫的工作原理网络爬虫的基本类型如何设计一个网络爬虫常用的网络爬虫工具和框架实际案例分析网络爬虫的法律与伦理问题如何防范恶意爬虫总结 引言 在信息爆炸的时代,互联网上每天都会产生大量的数据。这些数据分散在各种网站和平台…

【十八】【QT开发应用】标签页QTabWidget的常见用法

#include "widget.h" // 包含自定义的widget头文件 #include <QHBoxLayout> // 包含QHBoxLayout头文件&#xff0c;用于水平布局 #include <QTabWidget> // 包含QTabWidget头文件&#xff0c;用于创建标签页控件 #include <QDebug> // 包含QDebug头…

数据中心的智能负载组,为什么以及做什么?

停电会因停机而造成巨大损失。根据电力研究所 &#xff08;EPRI&#xff09; 的数据&#xff0c;98% 的停电持续时间不到 10 秒。但这10秒是毁灭性的。由于每分钟闲置的成本约为 5,600 美元&#xff0c;公司投资于确保其基础设施连续性的系统。负载组是测试和确保所需连续性的基…

Python面试宝典第8题:二叉树遍历

题目 给定一棵二叉树的根节点 root &#xff0c;返回它节点值的前序遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示例 3&#xff1a; 输入&#xff1a;root […

设计模式的一点理解

设计模式需要变化的角度看问题&#xff0c;思考和应对未来可能发生的变化&#xff1b; 在设计模式中&#xff0c;“封装变化”是一个核心原则&#xff0c;它强调了软件设计应该关注分离那些可能会变化的部分&#xff0c;以便在不影响系统其余部分的情况下&#xff0c;容易地修改…

谷歌学术与百度学术界面设计之比较:简约与华丽的对决

关于学术搜索&#xff0c;众所周知&#xff0c;谷歌学术与百度学术乃是两大翘楚选手&#xff0c;分别源自美中两地&#xff0c;竞相问鼎学术领域之巅。今番&#xff0c;笔者将为诸位剖析这两款学术搜索引擎之异同及优劣。 界面设计&#xff1a;谁更吸引眼球&#xff1f; 接下…

怎样在 PostgreSQL 中优化对大数值类型数据的计算?

文章目录 一、选择合适的数据类型二、索引优化三、查询语句优化四、数据库配置调整五、使用扩展功能六、示例七、总结 在 PostgreSQL 中处理大数值类型数据&#xff08;例如 BIGINT、NUMERIC 等&#xff09;的计算时&#xff0c;可能会遇到性能瓶颈。为了优化这些计算&#xff…

深度探讨:Facebook在全球范围内的社会影响力

Facebook作为全球最大的社交平台之一&#xff0c;不仅改变了人们的社交方式&#xff0c;还对全球社会产生了深远的影响。本文将从多个角度探讨Facebook在全球范围内的社会影响力&#xff0c;深入分析其对个人、社区和全球社会的多方面影响。 1. 信息传播与社交互动的革新 Fac…

云原生监控-Kubernetes-Promethues-Grafana

云原生监控-Prometheus 作者:行癫(盗版必究) 引读:本文章所涉及到技术点包括Prometheus、Grafana、Kuebrnetes;Prometheus基于外部构建采集并监控Kubernetes集群以及集群中的应用,例如使用mysql-node-exporter、nginx-node-exporter采集Kuebrnetes集群中的应用数据,使用…