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

23种设计模式-结构型模式之外观模式(Java版本)

Java 外观模式(Facade Pattern)详解

🧭 什么是外观模式?

外观模式是结构型设计模式之一,为子系统中的一组接口提供一个统一的高层接口,使得子系统更易使用

就像是酒店前台,帮你处理入住、叫车、订餐等各种服务,让你不用和多个部门打交道。


🧠 使用场景

  • 简化复杂系统的操作流程
  • 封装子系统,提高代码可维护性
  • 为旧系统提供统一的接口

🏗️ 模式结构

  • Facade(外观类):对外提供统一接口,封装子系统
  • Subsystem(子系统类):各个独立的模块或类,完成实际业务

✅ 示例:家庭影院系统

子系统类

public class DVDPlayer {public void on() { System.out.println("DVD 播放器打开"); }public void play() { System.out.println("DVD 播放电影"); }public void off() { System.out.println("DVD 播放器关闭"); }
}public class Projector {public void on() { System.out.println("投影仪打开"); }public void off() { System.out.println("投影仪关闭"); }
}public class Screen {public void down() { System.out.println("幕布放下"); }public void up() { System.out.println("幕布收起"); }
}

外观类

public class HomeTheaterFacade {private DVDPlayer dvd;private Projector projector;private Screen screen;public HomeTheaterFacade() {dvd = new DVDPlayer();projector = new Projector();screen = new Screen();}public void watchMovie() {System.out.println("准备观看电影...");screen.down();projector.on();dvd.on();dvd.play();}public void endMovie() {System.out.println("电影结束,关闭设备...");dvd.off();projector.off();screen.up();}
}

客户端调用

public class Main {public static void main(String[] args) {HomeTheaterFacade home = new HomeTheaterFacade();home.watchMovie();home.endMovie();}
}

🧩 优点

  • 简化客户端使用,提高系统易用性
  • 松散耦合,降低子系统之间依赖
  • 更好地组织代码结构

⚠️ 缺点

  • 增加额外的外观类
  • 可能造成“上帝类”问题(职责过重)

✅ 使用建议

适用于:

  • 系统复杂度高、子系统繁多的情况
  • 为旧系统封装一层适配接口
  • 需要定义入口统一调用多个类的场景

相关文章:

  • C++std::map
  • 批量替换多个 Word 文档中的指定图片
  • Spark SQL核心解析:大数据时代的结构化处理利器
  • 奇怪的问题
  • 【大数据分析】Apache Doris高性能实时分析数据库:MPP架构下的多场景应用与优势分析以及部署应用
  • 第十四届蓝桥杯 2023 C/C++组 飞机降落
  • 外网如何连接内网中的mysql数据库服务器
  • 云原生--基础篇-2--云计算概述(云计算是云原生的基础,IaaS、PaaS和SaaS服务模型)
  • 微信小程序 == 倒计时验证码组件 (countdown-verify)
  • 【Linux】:HTTPS协议
  • 阿里V2 点击验证码/新版 2.0-2.1-3.1-3.2 动态Fell
  • 【上位机——MFC】运行时类信息机制
  • C++ GPU并行计算开发实战:利用CUDA/OpenCL加速粒子系统与流体模拟
  • git比较不同分支的不同提交文件差异
  • Linux-网络基础
  • mindspeed-rl使用注意事项
  • 【ESP32】【微信小程序】MQTT物联网智能家居案例
  • Nginx下搭建rtmp流媒体服务 并使用HLS或者OBS测试
  • 相机标定(输出相机内参和畸变参数)
  • 前端实现数据导出成excel
  • 秦洪看盘|新热点涌现,A股活力渐显
  • 内部敏感文件遭万人共享,特朗普政府又曝安全漏洞
  • 我国自主研制的重大航空装备AG600性能怎样?专家解读
  • 张九思任电子科大副教授,曾以学生身份入选爱思唯尔全球前2%顶尖科学家
  • 云南昆明市副市长戴惠明已任市委常委、秘书长
  • 两日内连续施压,特朗普再次喊话美联储降息