返回首页

外观模式(面试版)

一、面试常考点

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 职责单一。