【设计模式】外观模式(Facade)详解

文章目录

    • 1. 引言:系统复杂,调用者太累
    • 2. 什么是外观模式
      • GoF 定义
    • 3. 外观模式的核心思想
    • 4. 外观模式的结构
    • 5. 示例:电脑启动系统
      • 5.1 子系统
      • 5.2 外观类
      • 5.3 客户端使用
    • 6. 外观模式的优点
    • 7. 外观模式的缺点
    • 8. 外观 vs 适配器 vs 桥接
    • 9. JDK 中的外观模式
      • Spring 的 JdbcTemplate
    • 10. 典型应用场景
      • 适合使用
      • 不适合使用
    • 11. 一个重要误区
    • 参考

1. 引言:系统复杂,调用者太累

在真实项目中,你经常会遇到这种代码:

CPUcpu=newCPU();Memorymemory=newMemory();Diskdisk=newDisk();cpu.start();memory.load();disk.read();

如果每个客户端都要写这一堆启动逻辑:

  • 调用顺序不能错
  • 依赖关系很复杂
  • 修改极易引发连锁问题

你会发现:

调用者被迫了解太多“系统内部细节”。

这正是外观模式要解决的问题。


2. 什么是外观模式

GoF 定义

为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用。

详解:又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。

外观(Facade)模式是“迪米特法则”的典型应用

一句话理解:

给复杂系统套一个“统一入口”。


3. 外观模式的核心思想

外观模式的目标不是添加功能,也不是改变接口,而是:

隔离“使用者”和“复杂实现”。

它的本质是:

  • 对外提供简单接口
  • 对内协调多个子系统

就像一个前台,你只要找它,不必认识公司所有员工。


4. 外观模式的结构

外观模式主要包含:

  1. Facade(外观类)

为多个子系统对外提供一个共同的接口。

  1. 多个子系统类

实现系统的部分功能,客户可以通过外观角色访问它。


5. 示例:电脑启动系统

5.1 子系统

publicclassCPU{publicvoidstart(){System.out.println("CPU启动");}}
publicclassMemory{publicvoidload(){System.out.println("内存加载");}}
publicclassDisk{publicvoidread(){System.out.println("磁盘读取");}}

5.2 外观类

publicclassComputerFacade{privateCPUcpu=newCPU();privateMemorymemory=newMemory();privateDiskdisk=newDisk();publicvoidstart(){cpu.start();memory.load();disk.read();System.out.println("电脑启动完成");}}

5.3 客户端使用

ComputerFacadecomputer=newComputerFacade();computer.start();

客户端再也不用关心 CPU、内存、磁盘的启动顺序。


6. 外观模式的优点

  1. 简化客户端调用
  2. 降低系统耦合度
  3. 提高系统可维护性
  4. 屏蔽内部复杂性

7. 外观模式的缺点

  1. 外观类可能变得臃肿
  2. 过度封装可能隐藏灵活性
  3. 不符合“对修改完全关闭”

8. 外观 vs 适配器 vs 桥接

模式目的
外观简化接口
适配器转换接口
桥接分离变化维度

9. JDK 中的外观模式

Spring 的 JdbcTemplate

jdbcTemplate.query(...)

内部封装了:

  • Connection
  • Statement
  • ResultSet
  • 异常处理

👉 对外提供“数据库访问外观”。


10. 典型应用场景

适合使用

  • 系统子模块复杂
  • 调用流程固定
  • 希望对外提供统一 API
  • 微服务、SDK 封装

不适合使用

  • 子系统很简单
  • 需要细粒度控制

11. 一个重要误区

外观模式不是为了“封死子系统”,而是为了“让大多数人用简单接口”。

高级用户仍然可以直接调用底层模块。


参考

外观模式 | 菜鸟教程

《图解设计模式》

外观 - Java教程 - 廖雪峰的官方网站

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

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

相关文章

内存碎片|c++内存池|lua gc

c内存池|lua gcC内存池和Lua GC的高效性取决于使用场景:内存池在固定大小对象的高频分配/释放场景下更高效Lua GC则在动态类型、灵活内存管理的脚本场景下更适配sum- C内存池:手动预分配一块连续内存,按需切割分配避免频繁调用系统 malloc/fr…

大语言模型在城市规划决策支持中的推理应用

大语言模型在城市规划决策支持中的推理应用 关键词:大语言模型、城市规划、决策支持、推理应用、人工智能 摘要:本文聚焦于大语言模型在城市规划决策支持中的推理应用。首先介绍了研究的背景、目的、预期读者和文档结构,明确相关术语。接着阐述大语言模型与城市规划的核心概…

喂金鱼小工具

链接:https://pan.quark.cn/s/2eac449f5915需要配合node下载使用,喜欢的朋友可一个安装到各种单机老电脑做个屏保。

深度学习计算机毕设之通过python-CNN深度学习对狗的体型识别通过机器学习对狗的体型识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

amd 功耗频率

链接:https://pan.quark.cn/s/638dbd83dcc2morepowertools的作用是修改BIOS文件中SPPT(Soft Power Play Tables)模块,这个模块包含了电压,风扇,功耗墙等的设置,如下图所示!

【课程设计/毕业设计】人工智能基于python-CNN卷积神经网络识别玻璃是否破碎基于人工智能python-CNN卷积神经网络识别玻璃是否破碎

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

AI元人文:欲望-客观-自感的纠缠治理——从三值纠缠到内生进化

AI元人文:欲望-客观-自感的纠缠治理——从三值纠缠到内生进化引言:治理的范式危机与元人文转向人工智能治理正陷入双重困境:一面是日益精巧却脱离实践的“茴香豆化”学术生产,一面是将人类价值悄悄“数值化”的技术优化陷阱。传统…

深度学习计算机毕设之基于python-CNN卷积神经网络识别玻璃是否破碎基于卷神经网络识别玻璃是否破碎

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

大数据领域数据产品的旅游行业应用方案

大数据时代,旅游行业如何用数据产品重构“人-货-场”闭环? 引言:旅游行业的“痛点急救包”,为何是数据产品? 凌晨3点,某景区运营经理的手机突然震动——实时监控显示,明日景区人流预测将突破最大承载量的120%。他立刻打开数据后台,快速调阅了未来3天的天气、周边交通…

导师严选9个AI论文平台,自考学生轻松搞定论文写作!

导师严选9个AI论文平台,自考学生轻松搞定论文写作! AI工具让论文写作不再难 在自考学习的道路上,论文写作常常成为学生们的“拦路虎”。面对繁重的学术任务和严格的格式要求,很多同学感到无从下手。然而,随着AI技术的发…

低端游戏网站:在线玩260+经典DOS/Windows游戏,基于JSDOS技术

对于许多资深玩家而言,重温《红色警戒》、《仙剑奇侠传98柔情篇》、《大富翁4》等经典游戏往往面临兼容性差、安装繁琐的难题。传统的解决方案是使用DOSBox等本地模拟器进行复杂配置。低端游戏​ 平台则另辟蹊径,通过前沿的Web技术将模拟器环境“搬”到了…

服务器/论坛试运行发布测试!

用香橙派的AI开发板挂载了一个论坛服务,都过来聊天喵! 链接:https://code.tokesystem.top/ 由于是非运营的很不稳定,因此只作为测试,随时可能会断掉,只作为学习交流使用 代码开源?(…

被说“像 AI”的论文,最先该改的是哪里?

如果你已经被提醒过一句话:“这篇论文有点像 AI。”我想先帮你把一个误区拆掉:这不是让你把整篇论文推翻重写。绝大多数情况下, 只需要改对位置,就能明显缓解问题。关键在于—— 顺序不能错。一、最先要改的,不是正文核…

深度学习毕设项目:基于python-CNN卷积神经网络识别玻璃是否破碎

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

Spring Boot 第一天:我与框架的“闪婚”之旅

嘿,大家好!我是星星,一个在编程世界里摸爬滚打的码农。今天,我要和你们分享我学习 Spring Boot 的第一天经历。这玩意儿听起来像个科幻小说里的超级英雄——“Spring Boot,拯救世界的脚手架!”但实际上&…

亲测好用的免费降ai率工具推荐:2026年最新论文降ai实操,教你如何利用ai降ai。

眼看着论文初稿要交,结果AI检测率99%?! 那一刻真的是脑袋“嗡”的一声。好不容易写完几万字,却被判定“AI生成”,这不崩溃才怪。 其实呢,我也经历过那种绝望。花钱试了十几款工具,最后才摸清楚…

如何做好大数据领域的元数据管理工作

如何做好大数据领域的元数据管理工作:解锁数据宝藏的密码 关键词:大数据、元数据管理、数据治理、数据目录、数据血缘、数据质量、数据标准 摘要:在大数据时代,海量的数据如同汪洋大海,而元数据管理就像是航海图&#…

实测高效的aigc免费降重方案:针对知网维普论文降ai,提供多种免费降低ai率路径,教你如何有效降低ai率。

眼看着论文初稿要交,结果AI检测率99%?! 那一刻真的是脑袋“嗡”的一声。好不容易写完几万字,却被判定“AI生成”,这不崩溃才怪。 其实呢,我也经历过那种绝望。花钱试了十几款工具,最后才摸清楚…

(新卷,200分)- 返回矩阵中非1的元素个数(Java JS Python C)

(新卷,200分)- 返回矩阵中非1的元素个数(Java & JS & Python & C) 题目描述 存在一个m*n的二维数组,其成员取值范围为0,1,2。 其中值为1的元素具备同化特性,每经过1S,将上下左右…

优雅的使用Nexent创建与部署前端面试智能体

文章目录引言Nexent平台简介Nexent优点实战:创建和部署一个前端面试智能体什么是知识库记忆管理它带来了什么好处?本地化部署未来前景总结引言 在AI技术重塑各行各业工作模式的今天,一个共识日益清晰:AI不会淘汰开发者&#xff0…