当前位置: 首页 > news >正文

Java编程之外观模式

前言

想象你要去一家很复杂的餐厅吃饭,但不想自己点菜、排队、找位置,也不想管厨房、洗碗、送餐这些后端流程。你只需要告诉餐厅服务员“我要一份牛排套餐”,然后坐等就好。这个服务员,就是外观模式(Facade Pattern)

模式定义

外观模式(Facade Pattern)是一种结构型设计模式,其核心目标是为复杂子系统提供一个统一的高层接口,简化客户端与系统的交互。它通过封装子系统的复杂逻辑,隐藏底层细节,使客户端无需了解子系统内部实现即可完成操作。这种模式符合迪米特法则(最少知识原则),有效降低了系统耦合度。

核心思路

外观模式就是给一大堆复杂系统(子系统)加一个“门面”/“服务员”:

  • 客户端只跟这个门面打交道,只需一句话完成任务;
  • 门面负责协调各个子系统(菜品准备、厨房、收银、送餐等)完成请求;
  • 客户端无需知道内部复杂流程,只关注结果。
    ┌─────────┐│ Client  ││─────────││meal()   │└─────────┘││ calls▼┌───────────────────────┐│ RestaurantFacade      │ ◀───┐│──────────────────────│     │   门面角色,隐藏内部流程│ + orderMeal(): void   │     │└───────────────────────┘     ││     │     │           ││     │     │ coordinates│     │     ▼│     │ ┌───────────────┐│     │ │ Kitchen       │  子系统 A:做菜│     │ │ + cookFood()  ││     │ └───────────────┘│     ▼│ ┌───────────────┐│ │ Cashier       │  子系统 B:收银│ │ + takePayment()││ └───────────────┘▼┌───────────────┐│ WaiterDelivery│  子系统 C:送餐│ + deliver()   │└───────────────┘

就像你打电话叫外卖,不用自己跑去不同店铺、找骑手、付钱、还要问“什么时候送到”……
你只需要叫一个号码(比如美团/饿了么),对方帮你搞定全部流程。

在这里插入图片描述

代码示例

以家庭智能控制为例子来说明,灯光,空调,音响智能设备的开启为例子如下:

// 子系统 A
//灯光
class Light { void on()  { System.out.println("Lights ON"); } 
}
//空调
class AC{ void  setTemp(int t) { System.out.println("AC set to " + t); } 
}
//音响
class Music { void play() { System.out.println("Music playing"); } 
}// 外观类
class SmartHomeFacade {private Light light = new Light();private AC ac = new AC();private Music music = new Music();public void startEvening() {light.on();ac.setTemp(22);music.play();}
}// 客户端
SmartHomeFacade home = new SmartHomeFacade();
home.startEvening();
// 输出:Lights ON 
//       AC set to 22 
//       Music playing

客户端不用管 Light、AC、Music 怎么协作,只调用 startEvening() 一句话搞定所有流程。

特点总结

优点解释
1. 使用简单客户只关注一两个调用,不需要学习复杂系统
2. 隐藏内部细节子系统内部发生什么,客户端完全不关心
3. 解耦子系统可以独立变化,不影响客户端
4. 有统一入口便于控制、安全、维护

使用场景

  • 当系统复杂,涉及多个子模块,但客户端只需一部分功能;
  • 当你想隔离外部代码对内部的依赖,便于将来变动时更灵活;
  • 当你想给外部提供简易、安全、统一的入口

小结

外观模式就是帮助你写一个“智能接待员”——让系统对外更友好,同时把复杂逻辑藏在后台。就像用遥控器控制电视,不用自己打线路、管芯片。业务简单了,代码也更清晰、更易扩展。是不是很简单,你看懂了么?

参考

《23种设计模式概览》
在这里插入图片描述

http://www.lryc.cn/news/571195.html

相关文章:

  • JSON编辑器:三种模式的应用(三)
  • 重构气血经络的数学模型:气血经络级联控制系统核心方程
  • 第17天:数据库学习笔记1
  • MySQL 默认连接数
  • .sstop勒索加密数据库恢复---惜分飞
  • 从电商平台下载数据的项目经验分享 (part 1)
  • 前后端拦截器+MDC实现纯数字 traceId 全链路日志追踪(axios + Spring Boot 超详细实战)
  • DeepSeek 大型 MoE 模型大规模部署压测学习
  • FlinkCDC-Hudi数据实时入湖原理篇
  • JVM监控的挑战:Applications Manager如何提供帮助
  • Spring Boot集成Kafka全攻略:从基础配置到高级实践
  • 多模态大语言模型演进:从视觉理解到具身智能的技术突破
  • Linux运维新人自用笔记(部署 ​​LAMP:Linux + Apache + MySQL + PHP、部署discuz论坛)
  • 5.安装IK分词器
  • ELK在Java的使用
  • Selenium(选择元素,浏览器/元素操作,等待,页面交互)
  • Windows Python 环境管理终极对比:极简方案 VS 传统方案(仅需 2 个软件实现全流程自动化)
  • Selenium(多窗口,frame,验证码,截图,PO模式)
  • rockx读取单张图片并检测图片内人脸的矩形
  • vite的常用配置
  • 「动态规划::数位DP」统计数字递推 / LeetCode 3352|1012(C++)
  • 线程池(Thread Pool)详解
  • 基于Cesium移动的天空云
  • 【Docker基础】Docker核心概念:命名空间(Namespace)之IPC详解
  • 根据Python模块的完整路径import动态导入
  • 05_MinIO+Java SpringBoot 实现透传代理下载
  • 如何确定驱动480x320分辨率的显示屏所需的MCU主频
  • 为何前馈3DGS的边界总是“一碰就碎”?PM-Loss用“3D几何先验”来解
  • Mac 安装JD-GUI
  • 低轨导航 | 低轨卫星导航PNT模型,原理,公式,matlab代码