欢迎来到“类型脚本中的设计模式”系列,它介绍了使用类型脚本进行 Web 开发中的一些有用的设计模式。
设计模式对于Web开发人员来说非常重要,我们可以通过掌握它们来编写更好的代码。在本文中,我将使用类型脚本来介绍模板方法模式。
CSV(逗号分隔值)是一种通用的、相对简单的文件格式。CSV 文件以纯文本形式存储表格数据(数字和文本)。当您需要处理CSV数据时,对应的处理流程如下图所示:
在了解了上面的处理流程之后,让我们使用 Node.js来实现解析 csv 文件的功能。
用户.csv
parse-csv.ts
在上面的代码中,我们导入 d3-dsv 模块来实现 csv 的解析功能。之后,我们使用 esno 来执行解析 cvs.ts 文件:
当上述代码成功运行时,终端将输出以下结果:
Markdown是一种轻量级标记语言,允许人们以易于阅读和写入的纯文本格式编写文档。要在网页上显示降价文档,我们必须将降价文档转换为HTML文档。
为了实现上述功能,我们的处理流程如下:
在了解了上面的处理流程之后,我们来使用 Node.js来实现解析 Markdown 文件的功能。
Users.md
parse-md.ts
在上面的代码中,我们导入标记的模块来实现Markdown文件的解析功能。之后,我们使用 esno 来执行解析 md.ts 文件:
当上述代码成功运行时,终端将输出以下结果:
对于前两个示例,尽管解析了不同类型的文件,但您会发现它们的解析过程是相似的。
整个过程主要包括三个步骤:读取文件,解析文件和处理数据。对于此场景,我们可以引入模板方法模式来封装上述三个步骤的处理顺序。
模板方法模式由两部分组成:抽象父类和具体实现子类。通常,子类的算法框架封装在抽象父类中,它还包括一些公共方法的实现和封装子类中所有方法的执行顺序。通过继承此抽象类,子类还继承整个算法结构,并且可以选择重写父类的方法。
接下来,让我们看一下如何使用模板方法模式实现 CSV 解析器和 Markdown 解析器。
为了更好地理解下面的代码,我们先来看看相应的UML类图:
在上图中,我们定义了一个抽象类,然后分别定义了两个子类和 。FileParser CsvParser MarkdownParser
文件解析器类
抽象类中的方法是所谓的模板方法,我们在其中封装了文件处理的过程。parse FileParser
csvParser 类
MarkdownParser 类
使用 两个类 和 ,我们可以通过以下方式解析 CSV 和标记文件
当您成功运行上面的代码时,相应的输出如下图所示:
使用模板方法模式,我们重新实现了 CSV 和标记文件的解析。实际上,使用抽象类,我们可以轻松地开发不同的文件解析器。FileParser
最后,我们来总结一下模板方法模式的使用场景:
该算法的整体步骤非常固定,但是当单个部分是可变的时,此时可以使用模板方法模式来抽象易于可变的部分,以便实现子类。