1. 意图
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Te m p l a t e M e t h o d使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
2. 动机
考虑一个提供A p p l i c a t i o n和D o c u m e n t类的应用框架。A p p l i c a t i o n类负责打开一个已有的以外部形式存储的文档,如一个文件。一旦一个文档中的信息从该文件中读出后,它就由一
个D o c u m e n t对象表示。
用框架构建的应用可以通过继承A p p l i c a t i o n和D o c u m e n t来满足特定的需求。例如,一个
绘图应用定义D r a w A p p l i c a t i o n和D r a w D o c u m e n t子类;一个电子表格应用定义S p r e a d s h e e t -A p p l i c a t i o n和S p r e a d s h e e t D o c u m e n t子类,如下页图所示。
抽象的A p p l i c a t i o n类在它的O p e n D o c u m e n t操作中定义了打开和读取一个文档的算法:
O p e n D o c u m e n t定义了打开一个文档的每一个主要步骤。它检查该文档是否能被打开,创建与应用相关的D o c u m e n t对象,将它加到它入的文档集合中,并且从一个文件中读取该D o c u m e n t。
我们称O p e n D o c u m e n t为一个模板方法(template method)。一个模板方法用一些抽象的操作定义一个算法,而子类将重定义这些操作以提供具体的行为。A p p l i c a t i o n的子类将定义检查一个文档是否能够被打开( C a n O p e n D o c u m e n t)和创建文档( D o C r e a t e D o c u m e n t)的具体算法步骤。D o c u m e n t子类将定义读取文档( D o R e a d)的算法步骤。如果需要,模板方法也可定义一个操作(A b o u t To O p e n D o c u m e n t)让A p p l i c a t i o n子类知道该文档何时将被打开。
通过使用抽象操作定义一个算法中的一些步骤,模板方法确定了它们的先后顺序,但它允许A p p l i c a t i o n和D o c u m e n t子类改变这些具体步骤以满足它们各自的需求。