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
相关产品推荐
相关产品推荐

