返回首页

工厂模式(面试版)

一、面试常考点

1. 工厂模式解决什么问题

把“对象创建逻辑”从业务代码中剥离,降低耦合。

2. 三种工厂如何区分

简单工厂:一个入口按参数分发;工厂方法:一个产品一个工厂;抽象工厂:创建“产品族”。

3. 面试追问点

新增产品时是否符合开闭原则、客户端是否感知具体类。

二、细节介绍

1. 核心思想

面向抽象编程,让调用方只依赖接口,不依赖具体实现类。

2. 优点

调用端更稳定、扩展新产品更容易、创建逻辑集中管理。

3. 代价

类数量增多,抽象层过多时理解成本上升。

三、示例代码

class SmsSender {
  send(msg) {
    console.log(`[sms] ${msg}`)
  }
}

class EmailSender {
  send(msg) {
    console.log(`[email] ${msg}`)
  }
}

class SenderFactory {
  static create(type) {
    if (type === 'sms') return new SmsSender()
    if (type === 'email') return new EmailSender()
    throw new Error(`Unsupported type: ${type}`)
  }
}

const sender = SenderFactory.create('email')
sender.send('面试通知已发送')

四、常用应用场景

1. UI 组件按平台创建

同一业务组件在 PC/移动端用不同实现。

2. 支付方式创建

按渠道创建微信、支付宝、银行卡支付实例。

3. 日志/通知通道创建

按配置动态创建 console/http/sentry 等上报器。

五、高频追问标准答法(Q/A)

1. Q: 简单工厂和工厂方法最大的区别

A: 简单工厂用一个类通过参数分发,新增产品常要改原工厂;工厂方法是一类产品对应一类工厂,扩展更符合开闭原则。

2. Q: 工厂模式是不是会导致类爆炸

A: 会增加类数量,但换来更清晰的职责边界。复杂业务里这是可接受的工程成本。

3. Q: 什么时候不建议用工厂

A: 对象创建极简单且几乎无扩展时,用工厂可能过度设计。