工厂模式本身不直接实现继承,而是通过调用已建立继承关系的构造函数或class来创建对象;可结合原型链、ES6 class或寄生组合式继承,分别适用于兼容性需求、现代开发或高阶组件场景。

JavaScript 中工厂模式本身不直接实现继承,但它可以与原型链、ES6 class 或寄生组合式继承等机制结合,来创建具有继承关系的对象实例。关键在于:工厂函数负责“封装创建逻辑”,而继承逻辑由构造器、原型或 class 体系承载。
工厂函数 + 构造函数 + 原型链继承
这是最经典、兼容性最好的组合方式。工厂函数不替代继承,而是调用已定义好继承关系的构造函数。
- 先用传统方式建立父类和子类的原型继承(如
Child.prototype = Object.create(Parent.prototype)) - 再编写工厂函数,根据参数返回不同子类的实例,隐藏具体构造器细节
- 例如:一个图形工厂根据类型返回
Circle或Square实例,二者都继承自Shape
工厂函数 + ES6 Class 继承(推荐现代写法)
利用 class 的 extends 明确声明继承关系,工厂函数只做实例化分发。
- 定义
class Shape作为基类,class Circle extends Shape等作为子类 - 工厂函数内部用
switch或映射表决定 new 哪个 class,统一返回对象 - 所有实例自动拥有继承链、
instanceof正确、可访问父类方法
寄生组合式继承 + 工厂封装(高阶场景)
当需要子类继承父类实例属性(而不仅是原型方法),又想避免多次调用父构造函数时,可用寄生组合式继承打底,再由工厂统一分发。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 使用
Object.create()设置原型,再用Parent.call(this)复制实例属性 - 工厂函数接收配置,动态组合参数并调用对应子类构造器
- 适合构建可配置的组件系统,比如 UI 组件工厂返回带不同行为的按钮/输入框实例
注意点:工厂不解决继承,只协调创建
常见误区是试图在工厂内部“手动复制方法”模拟继承——这会导致无法正确使用 instanceof、丢失原型链、无法被子类方法覆盖。真正可靠的继承必须发生在构造器或 class 定义阶段,工厂只是调用者。
本质上,工厂模式关注“如何创建”,继承关注“对象间的关系”。两者正交,配合使用时各司其职,效果清晰可控。

















