模板方法设计模式是行为设计模式(Behavioral Patterns)的一种。
Intent
Define the skeleton of an algorithm in an operation, deferring somesteps to subclasses. Template Method lets subclasses redefinecertain steps of an algorithm without changing the algorithm's structure.
意图:
在一个方法中定义了一个算法的骨架,将一些步骤地实现放在其继承类中。模板模型方法让继承类可以重实现一个算法的步骤,而不用去改变算法本身的结构。
Motivation
Consider an application framework that provides Application and Document classes. The Application class is responsible for openingexisting documents stored in an external format, such as a file. A Document object represents the information in a document once it's read from the file.
Applications built with the framework can subclass Application and Document to suit specific needs. For example, a drawing application defines DrawApplication and DrawDocument subclasses; a spreadsheetapplication defines SpreadsheetApplication and SpreadsheetDocumentsubclasses
动机:
考虑这样一个实例,这有一个应用程序框架提供两个类,应用程序类(Application)和文档类(Document)。应用程序类负责将一个打开并且存在的文件在外部存储起来,例如以一个文件的形式。一个文档对象代表从这样的文件中读取的信息。
使用这种框架的应用程序可以使得应用程序类和文档类的子类适合具体的要求。例如,一个画图的应用程序定义了一个画图的应用类和一个画图的文档类,这个类分别是应用类和文档类的子类;一个电子制表应用程序,可以定义一个制表的应用程序和制表文档。
OpenDocument defines each step for opening a document. It checks if the document can be opened, creates the application-specific Document object, adds it to its set of documents, and reads the Document from a file.
OpenDocument 定义了打开一个文档的步骤。首先检查文档是不是可以打开,创建相应的文档对象,然后将这个对象加入文档集中,从一个文件中读取文档内容。
We call OpenDocument a template method. A template method defines an algorithm in terms of abstract operations that subclasses override to provide concrete behavior. Application subclasses define the steps of the algorithm that check if the document can be opened(CanOpenDocument) and that create the Document (DoCreateDocument).Document classes define the step that reads the document (DoRead).The template method also defines an operation that lets Application subclasses know when the document is about to be opened(AboutToOpenDocument), in case they care.
我们调用OpenDoucument 方法只是调用了一个模板方法。 一个模板方法用一些抽象函数定义了一个算法,每一个该类的继承类都可以重写这些抽象函数来提供确切的行为。应用程序的子类定义了算法的步骤,包括检查文档是否可以被打开,可以创建新文档。文档类的子类定义了读取文档这个步骤。模板方法也定义了一个操作,可以使Application子类知道文档什么时候可以被打开。
By defining some of the steps of an algorithm using abstract operations, the template method fixes their ordering, but it lets Application and Document subclasses vary those steps to suit their needs.
通过使用抽象函数定义算法的步骤,模板函数固定了它们的顺序,但是使得Application 和 Document 类的继承类来实现算法里面的每一个步骤以来满足它们自身的需求。
The abstract Application class defines the algorithm for opening and reading a document in its OpenDocument operation:
抽象类Application类在它的OpenDocument方法中定义了一个打开文档的和读取文档内容的算法。