在Application中存在方法openDocument进行文档的操作:
void Application::openDocument(const char* name){if(!canOpenDocument(name))return;Document* doc = createDocument();if(doc != NULL){m_docs->addDocument(doc);aboutToOpenDocument(doc);doc->open();doc->read();}}
一个模版方法用一些抽象的操作定义一个算法,而子类将重定义这些操作以提供详细的行为:
class Application{public:void openDocument(const char* name);protected:virtual void canOpenDocument(const char* name);virtual void createDocument();virtual void aboutToOpenDocument();private:vector<Document*> m_docs;};
class MyApplication : public Application{protected:virtual Document* createDocument();virtual void aboutToOpenDocument();};Document* MyApplication::createDocument(){return new MyDocument();}void aboutToOpenDocument(){// initialize doc object.}
原文:http://www.cnblogs.com/ljbguanli/p/7142173.html