Java设计模式之外观模式(Facacde Pattern)

外观模式(Facade Pattern) 是一种 结构型设计模式 ,旨在为复杂的子系统提供一个统一的、简化的高层接口,使得客户端更容易使用子系统功能。它的核心思想是 隐藏系统复杂性,提供易用入口。

1. 核心角色

角色 说明
外观类(Facade) 提供统一的接口,将客户端的请求转发到子系统中的适当对象。
子系统类(Subsystem Classes) 实现子系统的具体功能,外观类通过组合这些类来完成任务。

2. 应用场景

  • 简化复杂系统:当系统存在多个复杂模块或接口时,提供一个统一入口。

  • 降低耦合度:减少客户端与子系统的直接依赖,提高系统可维护性。

  • 分层架构:为不同层次的模块提供统一接口(如API网关)。

3. 代码示例:家庭影院控制系统

假设家庭影院包含多个设备(灯光、音响、投影仪),通过外观模式一键启动"观影模式"。

步骤1:定义子系统类
步骤2:定义外观类(统一接口)
步骤3:客户端调用
输出结果

4. 外观模式类图

5. 外观模式优缺点

优点 缺点
简化客户端调用,隐藏系统复杂性。 可能引入单点故障(外观类成为瓶颈)。
降低客户端与子系统的耦合度。 违反开闭原则(修改子系统需调整外观类)。
提升代码可维护性和可读性。

6. 外观模式 vs. 中介者模式

模式 目的 关注点
外观模式 简化子系统接口,提供统一入口。 单向通信(外观调用子系统)。
中介者模式 协调多个对象间的交互,减少直接通信。 双向通信(对象间通过中介者交互)。

7. 实际应用场景

  1. API 网关

    • 外观类:网关统一处理鉴权、限流、路由。

    • 子系统:多个微服务(订单、用户、支付)。

  2. 日志框架

    • 外观类 :Logger 接口(如 SLF4J)。

    • 子系统:具体日志实现(Logback、Log4j2)。

  3. 文件压缩工具

    • 外观类 :提供 compress() 和 decompress() 方法。

    • 子系统:ZIP、RAR、7z 等压缩算法。


9. 总结

  • 核心价值:通过封装复杂子系统,提供简洁易用的接口。

  • 关键设计:外观类通过组合子系统对象,对外暴露统一方法。

  • 适用性:当系统复杂度高且需要简化客户端调用时,优先选择外观模式。

相关推荐
别动我齐刘海10 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
code2cat11 小时前
Java进阶篇之AtomicLongFieldUpdater:把累计额度留在对象字段中
java·cas·并发编程
WeiXin_DZbishe11 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
泡茶喝茶写代码11 小时前
A股量化数据工程:从 REST 接口到策略信号(第 18 篇):放量缩量异动扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
wewowilling12 小时前
认识微服务
java·运维·微服务·springcloud
代码什么用12 小时前
Java Web 7-10
java·servlet
蜗牛互联网14 小时前
GPT-6 与 Intelligent UI:从回答到可审计操作的产品迁移
java·人工智能·后端
SL_staff14 小时前
运维救火实录:钉钉考勤API变更引发工资计算异常,我们用JVS-Logic可视化逻辑引擎实现分钟级热修复
java·mysql·全栈
SunnyDays101114 小时前
Java 查找并高亮 Word 文字:精确查找及正则表达式模糊查找
java·查找文字·word 文档·高亮文字·正则匹配查找·模糊查找