模板(Template)模式的核心思想是:给业务逻辑(算法)的具体实现与抽象接口之间解耦。
它定义了一个算法的骨架,将某些步骤延迟到子类中实现。TemplateMethod 使得子类可以在不改变算法整体结构的前提下,重定义算法中的特定步骤。
模板模式通过继承来实现,而策略模式通过组合来实现,两者最终达到相似的目的。
例1
class AbstractClass
{
public:
virtual void TemplateMethod()
{
this->Primitive2();
this->Primitive1();
}
protected:
virtual void Primitive1() = 0;
virtual void Primitive2() = 0;
};
class ConCreateClass1:public AbstractClass
{
public:
virtual void Primitive2()
{
cout << __FUNCTION__ << endl;
}
virtual void Primitive1()
{
cout << __FUNCTION__ << endl;
}
};
int main(int argc, char *argv[])
{
AbstractClass *abs = new ConCreateClass1;
abs->TemplateMethod();
system("pause");
return 0;
}
例2
class TowerBase
{
public:
int _hp;
virtual void initWithBase() = 0;
};
class TowerUI:public TowerBase
{
public:
Texture _texture;
virtual void initWithUI() = 0;
};
class TowerSun:public TowerUI
{
public:
void init()
{
this->initWithBase();
this->initWithUI();
}
virtual void initWithBase()
{
}
virtual void initWithUI()
{
}
};