应用程序结构框架允许从一个或一组类中继承以便创建一个新的应用程序,重用现存类中几乎所有的代码,并且覆盖其中一个或多个函数以便自定义所需要的应用程序。应用程序结构框架中的一个基本的概念是模版方法(Template Method)模式,它很典型地隐藏在覆盖的下方,通过调用基类的不同函数(这时覆盖了其中一些函数以创建应用程序)来驱动程序运行。
模版方法的一个重要特征是它的定义在基类中(有时作为一个私有成员函数)并且不能改动——模版方法模式就是“坚持相同的代码”。它调用其它基类函数(就是那些被覆盖的函数)以便完成工作,但是客户程序员不必直接调用这些函数。
// Simple demonstration of Template Method.
#include <iostream>
using namespace std;
class ApplicationFramework {
protected:
virtual void customize1() = 0;
virtual void customize2() = 0;
public:
void templateMethod() {
for(int i = 0; i < 5; i++) {
customize1();
customize2();
}
}
};
// Create a new "application":
class MyApp : public ApplicationFramework {
protected:
void customize1() { cout << "Hello "; }
void customize2() { cout << "World!" << endl; }
};
int main() {
MyApp app;
app.templateMethod();
}
驱动应用程序运行的“引擎”是模版方法模式。在GUI(图形用户界面)应用程序中,这个“引擎”就是主要的事件环。
注意,模版方法就是“坚持相同的代码”,而被覆盖的函数是“变化的代码”。
选自《C++编程思想》。