2.6 外观模式
外观模式(Facade)给一组复杂的子系统提供一个简化的、统一的高层入口。客户端面对的不再是七八个互相牵连的子系统调用,而是一个清爽的门面方法。
家庭影院是教科书级的例子:看一场电影要调暗灯光、降下幕布、打开投影、配置功放、启动播放器。没有外观时,客户端必须记住全部步骤和正确顺序;有了外观,theater.watchMovie() 一行搞定。
下面的实验让你对比“外观一键”和“手动逐步”,感受外观把多少复杂度藏在了身后。
正在加载交互实验...
外观只是编排,不是封锁
java
class HomeTheaterFacade {
public void watchMovie() {
lights.dim(10);
screen.down();
projector.on();
amp.surround();
player.play();
}
}两个关键点:
- 外观自己不实现业务逻辑,它只负责按合适顺序编排子系统。
- 外观不剥夺直接访问子系统的权利。需要细粒度控制的高级用户,依然可以绕过外观直接调用
projector.on()。这一点把它和“代理/权限层”区分开来。
下面的实验用“客户端需要发出的调用次数”这个指标,量化外观带来的简化。
正在加载交互实验...
正在加载概念检查...
外观、中介者、API Gateway
- 外观 vs 中介者:外观是单向的,客户端 → 子系统;中介者是双向的,协调多个对象彼此通信。
- 现实回声:微服务里的 API Gateway、后端的 Service 层、SDK 对外暴露的简化客户端,本质都是外观思想的放大版——把一堆内部复杂性收拢到一个稳定、好用的入口背后。
正在加载概念检查...
正在加载本节练习...