一、功能
在面向对象的分析和设计中经常遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但逻辑(算法)的框架(或通用的应用算法)是相同的,Template模式提供了这种情况的一个实现框架。
Template模式是采用继承的方式实现这一点的:将逻辑(算法)框架放到抽象基类中,并定义好细节的接口,子类实现细节。
Strategy模式解决的是和Template模式类似的问题,但是Strategy模式是将逻辑(算法)封装到一个类中,并采取组合(委托)的方式解决问题的。
二、结构图
实现关系图如下
1. AbstractClass类:是抽象类,向客户提供TemplateMethod的方法,该方法的实现是细节是PrimitiveOperator1和PrimitiveOperator2,有继承的类实现
2. ConcreteClass类:是实现类,实现AbstractClass中TemplateMethod的细节
三、代码实现
class AbstractClass
{
public:
virtual ~AbstractClass() { }
void TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
}
protected:
virtual void PrimitiveOperation1() = 0;
virtual void PrimitiveOperation2() = 0;
};
class ConcreteClass1 : public AbstractClass
{
public:
ConcreteClass1() { }
~ConcreteClass1() { }
protected:
virtual void PrimitiveOperation1()
{
printf("[ConcreteClass1] PrimitiveOperation1() \n");
}
virtual void PrimitiveOperation2()
{
printf("[ConcreteClass1] PrimitiveOperation2() \n");
}
};
class ConcreteClass2 : public AbstractClass
{
public:
ConcreteClass2() { }
~ConcreteClass2() { }
protected:
virtual void PrimitiveOperation1()
{
printf("[ConcreteClass2] PrimitiveOperation1() \n");
}
virtual void PrimitiveOperation2()
{
printf("[ConcreteClass2] PrimitiveOperation2() \n");
}
};
Demo代码
void TemplateDemo()
{
AbstractClass* pClass = new ConcreteClass2;
pClass->TemplateMethod();
delete pClass;
}