Template Method模式
作用:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMetho
作用:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMetho
d 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
UML结构图:
现在看具体例子 泡茶喝泡咖啡
直观的印象:
现在将preparereceipt 方法抽象
brew和 addCondiments 方法是有区别的 所以 要声明为虚函数,由子类实现,也就是由子类重新定义了步骤:
最终的样子
#include <iostream>
using namespace std;
class caffeineBeverage
{
public:
caffeineBeverage(){}
virtual ~caffeineBeverage(){}
void prepareReceipt(){
boilWater();
brew();
pourInCup();
addCondiments();
}
void boilWater(){
cout<<"Boiling Water"<<endl;
}
void pourInCup(){
cout<<"Pour in the cup"<<endl;
}
protected:
virtual void brew()=0;
virtual void addCondiments ()=0;
};
class Coffee: public caffeineBeverage
{
public:
Coffee(){cout<<"Making Coffee..."<<endl;}
virtual ~Coffee(){}
protected:
virtual void brew(){
cout<<"Dripping coffee through filter "<<endl;
}
virtual void addCondiments(){
cout<<"Adding sugar and milk"<<endl;
}
};
class Tea: public caffeineBeverage
{
public:
Tea(){ cout<<"Making Tea..."<<endl;}
virtual ~Tea(){}
protected:
virtual void brew(){
cout<<"Dripping tea through filter "<<endl;
}
virtual void addCondiments(){
cout<<"Adding lemon"<<endl;
}
};
int main(void)
{
caffeineBeverage * coffee = new Coffee();
coffee->prepareReceipt();
cout<<endl;
caffeineBeverage * tea = new Tea();
tea->prepareReceipt();
return 0;
}

本文介绍模板方法模式的应用,通过泡茶和泡咖啡的例子展示了如何定义一个操作中的算法骨架,并允许子类重定义某些步骤而不改变整体算法结构。通过C++代码实现展示了模式的具体应用。
719

被折叠的 条评论
为什么被折叠?



