在模板方法模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
代码实例:
#include<iostream>
using namespace std;
class DrinkTemplate
{
public:
//单个功能
virtual void Boildwater() = 0;
virtual void Brew() = 0;
virtual void PourInCup() =0;
virtual void AddSomething() = 0;
//统一的完成步骤
void MakeStep()
{
Boildwater();
Brew();
PourInCup();
AddSomething();
}
};
class MakeCoffee : public DrinkTemplate
{
public:
virtual void Boildwater()
{
cout<<"烧水"<<endl;
}
virtual void Brew()
{
cout<<"冲泡咖啡"<<endl;
}
virtual void PourInCup()
{
cout<<"咖啡倒入杯子中"<<endl;
}
virtual void AddSomething()
{
cout<<"加入糖,加牛奶。。"<<endl;
}
};
class MakeTea: public DrinkTemplate
{
public:
virtual void Boildwater()
{
cout<<"烧水"<<endl;
}
virtual void Brew()
{
cout<<"倒入茶叶"<<endl;
}
virtual void PourInCup()
{
cout<<"茶叶倒入杯子中"<<endl;
}
virtual void AddSomething()
{
cout<<"加点奶。。"<<endl;
}
};
void test1()
{
DrinkTemplate* makecoffee = new MakeCoffee;
makecoffee->MakeStep();
DrinkTemplate* maketea = new MakeTea;
maketea->MakeStep();
}
int main()
{
test1();
return 0;
}
运行结果: