模板方法模式
解决方案
模板方法模式建议将算法分解为一系列步骤,将这些步骤重写为方法,最后在“模板方法”中按顺序调用这些方法。步骤可以是抽象的,也可以有一些默认实现。为了能够使用该算法方法,客户端需要提供自己的子类并实现所有抽象步骤。如有必要,有一些步骤需要重写(但此步骤不包括模板方法本身)。
让我们考虑如何在数据挖掘应用程序中实现上述方案。我们可以为图中的三种解析算法创建一个基类,它将定义调用一系列不同文档处理步骤的模板方法。
模板方法将算法分解为多个步骤方法,并允许子类覆盖这些步骤,而不是覆盖实际的模板方法。
首先,我们将所有步骤声明为抽象类型,强制子类自行实现这些方法。在我们的例子中,所有必要的实现都已经在子类中,所以我们只需要调整这些方法的签名以匹配超类的签名。
现在,让我们看看如何删除重复代码。不同的数据格式,打开和关闭文件以及提取和解析数据的代码是不同的,所以不需要修改这些方法。但其他步骤,例如分析原始数据和生成报告,实现非常相似,因此可以将它们提取到基类中,以便子类可以共享此代码。
如您所见,我们有两种类型的步骤:
还有另一种称为钩子的步骤。挂钩是内容为空的可选步骤。即使没有覆盖钩子,模板方法也可以工作。钩子通常放置在算法中重要步骤之前和之后,为子类提供额外的算法扩展点。
tags:
算法