You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript工厂模式下公共方法复用及抽象类使用问题咨询

问题1解答:公共代码的存放位置

公共代码推荐放在实现了Parent接口的抽象基类中,你可以将所有子类重复的方法实现、公共成员定义都收敛到这个抽象基类,子类仅需要继承抽象基类,实现自身差异化的构造逻辑即可。

参考实现代码如下:

抽象基类定义

export abstract class AbstractParent implements Parent {
  some_foo: string;
  // 声明子类差异化的公共属性
  protected another_var: string;

  constructor(some_foo: string) {
    this.some_foo = some_foo;
  }

  // 直接实现所有子类共用的方法逻辑
  async some_function(some_param: unknown): Promise<void> {
    // 原重复逻辑直接迁移到此处,可正常访问 this.some_foo、this.another_var、some_param
  }

  // 其他所有公共方法都可以放在这里实现
}

子类改造实现

export class ChildOne extends AbstractParent {
  constructor(some_foo: string) {
    super(some_foo);
    // 仅保留子类差异化的赋值和初始化逻辑
    this.another_var = "one";
  }
}

export class ChildTwo extends AbstractParent {
  constructor(some_foo: string) {
    super(some_foo);
    // 仅保留子类差异化的赋值和初始化逻辑
    this.another_var = "two";
  }
}

如果后续你有多重继承的需求,也可以采用Mixin方案实现公共逻辑复用,但当前场景下抽象基类是复杂度最低的方案。

问题2解答:抽象类存放公共代码的合理性

完全合理,是当前场景的最优选择,核心理由如下:

  • 无侵入兼容现有逻辑:抽象基类实现了原有的Parent接口,所有现有声明为Parent类型的代码,都可以直接兼容抽象基类的子类实例,不需要修改任何旧代码,改造影响面为0。
  • 符合抽象类的设计定位:抽象类本身就是用于提取多个子类的公共逻辑,同时保留接口的契约约束,完美匹配你当前“复用公共实现、保留子类差异化初始化”的需求。

内容的提问来源于stack exchange,提问作者Sid Anand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:06:02