作用:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
UML结构图:
抽象基类:
1)AbstractClass:抽象基类,定义算法的轮廓
解析:
TemplateMethod 的关键在于在基类中定义了一个算法的轮廓,但是算法每一步具体的实现留给了派生类.但是这样也会造成设计的灵活性不高的缺点,因为轮廓已经定下来了要想改变就比较难了,这也是为什么优先采用聚合而不是继承的原因.
#include <iostream> using namespace std; class AbstractClass { public: AbstractClass(){} virtual ~AbstractClass(){} // 这个函数中定义了算法的轮廓 void TemplateMethod() { PrimitiveOperation1(); PrimitiveOperation2(); } protected: // 纯虚函数,由派生类实现之 virtual void PrimitiveOperation1() = 0; virtual void PrimitiveOperation2() = 0; }; // 继承自AbstractClass,实现算法 class ConcreteClass : public AbstractClass { public: ConcreteClass(){} virtual ~ConcreteClass(){} protected: virtual void PrimitiveOperation1() { cout << "PrimitiveOperation1 by ConcreteClassn\n"; } virtual void PrimitiveOperation2() { cout << "PrimitiveOperation2 by ConcreteClassn\n"; } }; void main() { AbstractClass* pConcreteClass = new ConcreteClass; pConcreteClass->TemplateMethod(); delete pConcreteClass; }