在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架是相同的。Template提供了这种情况的实现框架。
Template.h
//Template.h #ifndef _TEMPLATE_H_ #define _TEMPLATE_H_ class AbstractClass { public: virtual ~AbstractClass(); void TemplateMethod(); protected: virtual void PrimitiveOperation1() = 0; virtual void PrimitiveOperation2() = 0; AbstractClass(); private: }; class ConcreteClass1:public AbstractClass { public: ConcreteClass1(); ~ConcreteClass1(); protected: void PrimitiveOperation1(); void PrimitiveOperation2(); private: }; class ConcreteClass2:public AbstractClass { public: ConcreteClass2(); ~ConcreteClass2(); protected: void PrimitiveOperation1(); void PrimitiveOperation2(); private: }; #endif //~TEMPLATEHTemplate.cpp
#include "Template.h" #include <iostream> using namespace std; AbstractClass::AbstractClass() { } AbstractClass::~AbstractClass() { } void AbstractClass::TemplateMethod() { this->PrimitiveOperation1(); this->PrimitiveOperation2(); } ConcreteClass1::ConcreteClass1() { } ConcreteClass1::~ConcreteClass1() { } void ConcreteClass1::PrimitiveOperation1() { cout<<"ConcreteClass1...PrimitiveOperation1"<<endl; } void ConcreteClass1::PrimitiveOperation2() { cout<<"ConcreteClass1...PrimitiveOperation2"<<endl; } ConcreteClass2::ConcreteClass2() { } ConcreteClass2::~ConcreteClass2() { } void ConcreteClass2::PrimitiveOperation1() { cout<<"ConcreteClass2...PrimitiveOperation1"<<endl; } void ConcreteClass2::PrimitiveOperation2() { cout<<"ConcreteClass2...PrimitiveOperation2"<<endl; }
#include "Template.h" #include <iostream> using namespace std; int main(){ AbstractClass* p1 = new ConcreteClass1(); AbstractClass* p2 = new ConcreteClass2(); p1->TemplateMethod(); p2->TemplateMethod(); return 0; }
原文:http://blog.csdn.net/starcuan/article/details/20370147