Skip to Content
面试题库Design Patterns[面试题] 简单工厂、工厂方法、抽象工厂有什么区别?

[面试题] 简单工厂、工厂方法、抽象工厂有什么区别?

📖 版块 A:知识讲解版 (温故知新)

  • 简单工厂

    1. 一个工厂类根据参数决定返回哪种产品。
    2. 适合产品种类少、变化不大的场景。
    3. 缺点是新增产品通常要修改工厂类,违背开闭原则。
  • 工厂方法

    1. 把“创建哪种产品”的责任下放给不同具体工厂。
    2. 新增产品时,通常新增工厂和产品即可。
    3. 更符合开闭原则。
  • 抽象工厂

    1. 用于创建一整套相互关联的产品族。
    2. 比如一套深色主题 UI 组件、一套数据库驱动家族。
    3. 它关注的不是单个对象,而是“成套对象的一致性”。
  • 一句话区别

    1. 简单工厂解决“从一堆产品里挑一个”。
    2. 工厂方法解决“把创建逻辑分散给不同工厂”。
    3. 抽象工厂解决“成套产品一起创建”。

🎤 版块 B:面试实战版 (高手逐字稿)

Q:简单工厂、工厂方法、抽象工厂有什么区别?

💬 高手逐字稿

这三个模式本质上都在解决同一个问题:不要把对象创建逻辑直接散落在业务代码里。 但它们应对的复杂度层级是不一样的。

最基础的是简单工厂。你可以把它理解成一个“总调度工厂”,传入不同参数,它返回不同产品。它的优点是使用直观,适合产品种类少、规则简单的场景。但问题也很明显,一旦新增产品,你往往得直接修改这个工厂本身,所以扩展性一般。

再往上一层是工厂方法。它的思路是:不让一个工厂包打天下,而是把“创建什么产品”这件事下放给不同具体工厂。这样新增产品时,通常只需要新增一个产品类和对应工厂类,原有工厂结构不用动,更符合开闭原则。

再复杂一点,就是抽象工厂。它不再只是创建单个对象,而是面向“产品族”。比如你不是只创建一个按钮,而是要同时创建一整套深色主题下的按钮、输入框、下拉框;或者你不是只切换一个驱动,而是整套数据库相关对象都要一起切换。这时候抽象工厂最合适。

所以我一般会这么总结它们的层级关系:

  • 简单工厂:一个工厂分发多个产品;
  • 工厂方法:多个工厂各自负责一种产品;
  • 抽象工厂:一个工厂负责一整套相关产品族。

它们没有绝对谁更高级,而是看你的业务到底复杂到哪一步。

最后更新于:
⏱️

登录后开始阅读

当前 MVP 版本只开放邮箱密码登录注册。完成登录后即可进入面试题内容。

还没有账号?先去注册