外观模式(面试版)
一、面试常考点
1. 外观模式解决什么问题
为复杂子系统提供统一简化入口。
2. 核心价值
降低调用复杂度,屏蔽系统细节。
3. 常见追问
外观模式是否会掩盖底层能力。
二、细节介绍
1. 核心思想
把多个子模块组合成一套更易用的高层 API。
2. 优点
调用方体验更稳定,子系统演进对外影响更小。
3. 代价
外观接口设计不当会成为“万能大类”。
三、示例代码
class AuthService {
login() {
return { token: 'token-1' }
}
}
class UserService {
getProfile() {
return { id: 1, name: 'Alice' }
}
}
class PermissionService {
getPermissions() {
return ['read', 'write']
}
}
class UserFacade {
constructor() {
this.auth = new AuthService()
this.user = new UserService()
this.permission = new PermissionService()
}
bootstrap() {
const { token } = this.auth.login()
return {
token,
profile: this.user.getProfile(),
permissions: this.permission.getPermissions(),
}
}
}
console.log(new UserFacade().bootstrap())
四、常用应用场景
1. BFF 层接口聚合
多个后端接口组合成前端友好接口。
2. 前端 SDK 封装
把埋点、登录、配置读取统一到一个门面。
3. 页面初始化
将多服务初始化流程抽成单入口方法。
五、高频追问标准答法(Q/A)
1. Q: 外观模式和适配器区别
A: 外观是“简化多系统入口”,适配器是“转换不兼容接口”。
2. Q: 如何避免外观类过大
A: 按业务域拆分多个 facade,保持每个 facade 职责单一。