中 基础
门面模式#
一句话答案#
提供统一高层接口封装子系统复杂性,降低耦合;SLF4J(日志门面)、API Gateway 都是门面模式。
核心要点
场景: SLF4J(日志门面) / Spring MVC DispatcherServlet / 微服务 API Gateway
好处: 简化调用 / 解耦 / 统一入口
面试回答(2分钟版)
门面模式的核心是为复杂的子系统提供一个统一的高层接口,降低客户端与子系统之间的耦合度。就像酒店前台一样,你不需要分别找保洁、餐饮、行李员,跟前台说一声就能搞定所有事情。Java 生态中最典型的门面是 SLF4J——它是日志框架的门面接口,背后可以接 Logback、Log4j2 等不同实现,业务代码只依赖 SLF4J 就行,切换日志框架不用改一行业务代码。在微服务架构中,API Gateway 也是门面模式的体现,外部客户端只需要和网关交互,由网关统一做路由、鉴权、限流,再转发到后端几十个微服务,屏蔽了内部的复杂性。和适配器模式的区别在于:适配器是为了兼容两个已有接口,做转换;门面是为了简化复杂子系统的访问,提供一个更易用的新接口。门面的缺点是可能变成上帝对象,所有逻辑都堆在门面层,需要注意职责划分。
追问与易错
追问方向:
- “和适配器区别?”→ 适配器是转换两个不兼容接口使其能协作;门面是为复杂子系统提供一个简化的统一高层接口,降低客户端的使用复杂度,目的和场景不同
- “SLF4J 为什么是门面?”→ SLF4J 定义了统一的日志 API(门面接口),业务代码只依赖 SLF4J,底层可接 Logback/Log4j2/JUL 等不同实现,切换日志框架不改业务代码,完美体现门面模式的解耦
- “门面缺点?”→ 可能变成上帝对象(God Object),所有逻辑堆在门面层导致职责膨胀;过度封装可能隐藏子系统细节导致灵活性下降;门面本身也需要随子系统变化而更新
易错点:
- ❌ 门面就是简单封装——核心是为复杂子系统提供统一入口
- ❌ 混淆门面和代理