TypeScript中抽象类结合模板方法模式可分离算法骨架与可变步骤:父类用abstract声明模板方法和抽象方法,子类必须实现抽象方法并可实例化,确保流程统一、实现灵活。

TypeScript 通过抽象类 + 模板方法模式,能把算法骨架和可变步骤清晰分离:父类定流程、子类填细节,既复用逻辑又保留灵活性。
抽象类定义模板骨架
用 abstract class 声明模板类,其中包含:
- 一个或多个 abstract 方法(如
calculateArea()),强制子类实现具体逻辑 - 一个 具体模板方法(如
render()),按固定顺序调用抽象方法和公共逻辑 - 可选的 protected 具体方法(如
logStart()),供子类复用但不对外暴露
子类必须实现抽象方法
继承抽象类的子类,需用 extends 显式继承,并完整实现所有 abstract 方法:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 未实现任一抽象方法 → TypeScript 编译报错(不是运行时错误)
- 可在子类中覆盖父类的具体方法(如重写
logStart()),不影响模板流程 - 子类不能 new 抽象类本身,但可以 new 子类实例,确保行为落地
典型模板方法结构示例
比如统一的数据渲染流程:
立即学习“Java免费学习笔记(深入)”;
- 父类
Renderer定义render()模板方法:先validate(),再formatData()(抽象),最后output() - 子类
HtmlRenderer实现formatData()返回 HTML 字符串 - 子类
JsonRenderer实现同名方法返回 JSON 字符串 - 调用
new HtmlRenderer().render()或new JsonRenderer().render(),走同一骨架、不同实现
关键设计要点
要让模式真正起效,注意这几点:
- 模板方法本身用 public 或 protected,避免 private(子类无法调用)
- 抽象方法用 abstract 且无函数体,声明即契约
- 把“可能变化”和“一定不变”的部分明确切分——前者抽成 abstract,后者留在模板方法内
- 配合 protected 成员,既允许子类访问共享逻辑,又防止外部误用

















