当前位置: 首页 > 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
  • 中华人民共和国和俄罗斯联邦在纪念中国人民抗日战争、苏联伟大卫国战争胜利和联合国成立80周年之际关于进一步深化中俄新时代全面战略协作伙伴关系的联合声明
  • 融创中国:今年前4个月销售额约112亿元
  • 美联储主席:关税“远超预期”,美联储实现目标的进程或被推迟至明年
  • 用社群活动维系“不开发”古镇的生命力
  • 微软通讯软件Skype正式停止运营:斥资85亿美元购入,月活用户曾超3亿
  • 胡塞武装称以色列所有机场均为其打击目标