设计模式-结构型模式-外观模式
外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。[DP]

首先,定义子系统的各个组件接口和具体实现类:
// 子系统组件接口
public interface SubsystemA {void operationA();
}public interface SubsystemB {void operationB();
}public interface SubsystemC {void operationC();
}// 子系统组件的具体实现
public class ConcreteSubsystemA implements SubsystemA {@Overridepublic void operationA() {System.out.println("Subsystem A operation");}
}public class ConcreteSubsystemB implements SubsystemB {@Overridepublic void operationB() {System.out.println("Subsystem B operation");}
}public class ConcreteSubsystemC implements SubsystemC {@Overridepublic void operationC() {System.out.println("Subsystem C operation");}
}
接下来,创建外观类,它包含了对子系统中各个组件的引用,并提供了简化后的接口:
public class Facade {private SubsystemA subsystemA;private SubsystemB subsystemB;private SubsystemC subsystemC;public Facade() {subsystemA = new ConcreteSubsystemA();subsystemB = new ConcreteSubsystemB();subsystemC = new ConcreteSubsystemC();}// 客户端调用的简单接口public void operation() {subsystemA.operationA();subsystemB.operationB();subsystemC.operationC();}//TODO 客户机调用的接口可以根据不同的情况,对子系统的方法进行组合
}
最后,创建客户端代码来演示如何使用外观类:
public class FacadePatternExample {public static void main(String[] args) {Facade facade = new Facade();// 客户端通过外观类来调用子系统操作facade.operation();}
}
相关文章:
设计模式-结构型模式-外观模式
外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。[DP] 首先,定义子系统的各个组件接口和具体实现类: // 子系统组件接…...
C++学习第四天(类与对象下)
1、构造函数的其他知识 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值 构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化,构造函…...
【AI Agent系列】【MetaGPT多智能体学习】0. 环境准备 - 升级MetaGPT 0.7.2版本及遇到的坑
之前跟着《MetaGPT智能体开发入门课程》学了一些MetaGPT的知识和实践,主要关注在MetaGPT入门和单智能体部分(系列文章附在文末,感兴趣的可以看下)。现在新的教程来了,新教程主要关注多智能体部分。 本系列文章跟随《M…...
python自动化管理和zabbix监控网络设备(无线AC控制瘦ap配置部分)
目录 前言 拓扑 一、AC-SW1 二、Core-sw1 三、Core-sw2 四、汇聚层 五、AC1 六、SW1-6 七、DMZ区域 前言 具体原理和操作可以访问我的主页视频 白帽小丑的个人空间-白帽小丑个人主页-哔哩哔哩视频 拓扑 一、AC-SW1 sys sysname AC-SW1 vlan batch 100 200 210 220 2…...
XSS中级漏洞(靶场)
目录 一、环境 二、正式开始闯关 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x0B 0x0C 0x0D 0x0E 0x0F 0x10 0x11 0x12 一、环境 在线环境(gethub上面的) alert(1) 二、正式开始闯关 0x01 源码: 思路:闭…...
etcd java 客户端jetcd库踩坑日志
问题 Q: EtcdException: Unable to resolve endpoints [http://0.0.0.0:2379/] A: 经过测试,endpoints最后的斜杠不能写,完整的endpoints是http://0.0.0.0:2379 Q: java.lang.NoSuchMethodError: io.netty.buffer.Po…...
<网络安全>《61 微课堂<第1课 南北向流量是什么?>》
1 形象化解释 在网络安全中,经常听到南北向流量这个词。那究竟是什么意思呢? 这里的南北,就是地图上的东西南北,是方向。我们在画网络架构图时,往往是由上到下依次是web层、应用层、数据层,流量从web层到…...
Day12-【Java SE进阶】JDK8新特性:Lambda表达式、方法引用、常见算法、正则表达式、异常
一、JDK8新特性 1.Lambda表达式 Lambda表达式是JDK 8开始新增的一种语法形式;作用:用于简化名内部类的代码写法。 注意:Lambda表达式并不是说能简化全部匿名内部类的写法,只能简化函数式接口的匿名内部类。 有且仅有一个抽象方法的接口。注意:将来我们见到的大部…...
go mod中如何解决 xxx/yyy/lib@v1.1.0: unrecognized import path
需要检查的几个地方 这个错误通常出现在 Go 模块系统无法找到指定版本的模块时。有几种可能的原因和解决方法: 模块未被发布或标记: 确保 xxx/yyy/lib 模块的版本 v1.1.0 已经被正确地发布或标记。你可以在对应的 GitLab 仓库中查看是否存在 v1.1.0 标签…...
比较Python和Rust的内存管理机制
大家好,内存管理是编程语言的基础,它确保着资源被有效利用,不同的编程语言采用不同的策略来管理内存。有些语言需要程序员手动管理内存,有些语言则自动化了内存管理过程。Python和Rust都采用了垃圾收集(Garbage Collec…...
Linux系统——Shell脚本——一键安装LNMP
#!/bin/bash #安装nginx echo "安装nginx服务" wget http://nginx.org/download/nginx-1.11.4.tar.gz &>/dev/null if [ $? -eq 0 ] thenecho "nginx-1.11.4安装包下载完成"echo "--开始安装必要的依赖文件--"yum install -y gcc gcc-c…...
算法复习之二分【备战蓝桥杯】
二分模板一共有两个,分别适用于不同情况。 算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l r时,我们就找到了目标值。 版本一 当我们将区间[l, r]划分成[l, mid]和[mid 1, r]时,其更…...
如何做代币分析:以 SHIB 币为例
作者:lesleyfootprint.network 编译:cicifootprint.network 数据源:SHIB Token Dashboard (仅包括以太坊数据) 在加密货币和数字资产领域,代币分析起着至关重要的作用。代币分析指的是深入研究与代币相关…...
Springboot+vue的考勤管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。
演示视频: Springbootvue的考勤管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层…...
https://htmlunit.sourceforge.io/
https://htmlunit.sourceforge.io/ 爬虫 HtmlUnit – Welcome to HtmlUnit HtmlUnit 3.11.0 API https://mvnrepository.com/artifact/net.sourceforge.htmlunit/htmlunit/2.70.0 https://s01.oss.sonatype.org/service/local/repositories/releases/content/org/htmlunit…...
回文链表(leetcode)
我自己第一个写的代码: bool isPalindrome(struct ListNode* head){struct ListNode* tail NULL;struct ListNode* pos NULL;if( head->next NULL){return true;}while( 1 ){if( head->next NULL || (head->next->next NULL && head->…...
大语言模型(LLM)技术名词表(一)
LLMs on a Phone:指在手机设备上运行的大型语言模型。 Scalable Personal AI:指用户可以在个人设备上对AI模型进行微调的技术。 Responsible Release:发布AI模型时考虑社会、法律和伦理影响的做法。 Multimodality:AI模型能处理…...
C++ 快速排序快速选择
目录 1、75. 颜色分类 2、912. 排序数组 3、 215. 数组中的第K个最大元素 4、LCR 159. 库存管理 III 1、75. 颜色分类 思路:利用快速排序思路,使用三指针分块进行优化。 [0,left]——小于key[left1,right-1]——等于key[right,nums.size()]——大于k…...
雅马哈伺服器TS-S系列说明具体详情内容可参看PDF目录内容
雅马哈伺服器TS-S系列说明具体详情内容可参看PDF目录内容...
SpringBoot底层原理
SpringBoot底层原理 一 配置优先级 1.配置方式 Springboot中支持三种配置方式,分别为: application.propertiesapplication.ymlapplication.yaml 2.配置优先级 当存在多份配置文件时,配置文件会按照它们的优先级生效。 优先级从高到底…...
Gitee本土化战略深度解析:中国开发者生态的“新基建“ Gitee本土化战略深度解析:中国开发者生态的“新基建“
在数字化转型浪潮席卷全球的当下,代码托管平台作为软件开发的基础设施,其战略价值日益凸显。Gitee作为中国本土领先的代码托管平台,凭借其独特的本土化优势,正在重塑国内开发者的协作生态。与GitHub等国际平台相比,Git…...
深入解析VCS中xprop选项的X态传播机制与应用场景
1. 理解VCS中的X态传播基础 在数字电路仿真中,X态(未知状态)就像电路世界里的"薛定谔的猫"——它既不是明确的0也不是明确的1。这种特殊状态在实际硬件中可能由多种原因产生,比如未初始化的寄存器、多驱动冲突或者信号…...
HTML函数运行时触控屏失灵是硬件故障吗_输入层兼容性测试【详解】
触控屏失灵与HTML函数基本无关,主因是事件拦截、被动监听限制或CSS遮挡;preventDefault()误用、pointer-events设置不当及iOS的300ms延迟机制是常见根源。触控屏失灵和 HTML 函数运行有关吗基本无关。HTML 本身没有“运行时函数”概念,onclic…...
山东大学软件学院项目实训记录(三)——基于MetaHuman等插件实现数字人的发型及服饰制作
前言本项目 研发面向医学教育的医患沟通模拟与评价系统,基于大模型实现智能交互、个性化病例模拟和评分,为医学生提供沉浸式医患沟通实训场景,解决线下标准化病人资源稀缺的问题,提升医学生医患沟通实操能力。本人负责美术工作&am…...
Golang如何处理JSON空值null_Golang JSON空值处理教程【精通】
Go解析JSON时null被忽略或panic的解决方法:用*string等指针类型接收可空字段;对三态需求(null/空值/缺失)用NullString;避免interface{}和滥用json.RawMessage;优先用标准库,第三方库仅在性能或…...
Qwen2.5-VL-7B-Instruct惊艳效果集:细粒度图像描述+跨模态逻辑推理作品
Qwen2.5-VL-7B-Instruct惊艳效果集:细粒度图像描述跨模态逻辑推理作品 1. 模型能力概览 Qwen2.5-VL-7B-Instruct是一款突破性的多模态视觉-语言模型,在图像理解和跨模态推理方面展现出令人惊艳的能力。这个16GB的BF16模型需要至少16GB显存的GPU支持&am…...
告别SVN!5人小团队用Gitea+SQLite在内网轻松搞定Git代码仓(附Windows/Linux双平台配置)
告别SVN!5人小团队用GiteaSQLite在内网轻松搞定Git代码仓(附Windows/Linux双平台配置) 在小型技术团队中,版本控制系统往往面临两难选择:功能齐全的企业级方案太重,而轻量级工具又缺乏协作能力。我曾带领一…...
测试工程师效率工具:Top 10推荐
在软件测试领域,工具选型直接决定测试效率与产品质量。2026年,AI驱动、云原生和低代码化成为测试工具演进的核心趋势。本文基于行业实践与技术评估,精选10款覆盖测试全生命周期的效率工具,助力测试工程师应对敏捷交付与复杂系统验…...
用LabVIEW做个智能家居小系统:把温度报警、风扇控制和波形监控都集成到一个VI里
用LabVIEW构建智能家居监控系统:从模块化到集成化实战 在物联网技术快速渗透的今天,智能家居系统正从概念走向普及。对于工程师和学生而言,如何将分散的传感器、控制器整合为有机整体,是提升工程实践能力的关键跳板。LabVIEW作为…...
测试工程师的“大家来找茬”职业病,在生活中有多可怕?
在软件测试领域,“大家来找茬”不仅是日常工作核心,更可能演变为一种无形的职业病——长期专注于缺陷发现,这种思维模式悄然渗透到生活各个角落,引发一系列连锁反应。软件测试工程师作为产品质量的守门人,习惯于在代码…...
