模板方法模式:用来对类或对象怎样交互和怎样分配职责进行描述
- 定义一个操作中的算法框架,将一些细节步骤延迟到子类中实现。模板方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤
现有冲咖啡和泡茶两种情况,两种情况的大体框架比较相似,细节不同
//模板框架
class DrinkTemplate{
public:
virtual void boilwater() = 0;//煮水
virtual void Brew() = 0;//冲泡
virtual void Pour() = 0;//倒茶
virtual void AddSomething() = 0;//加入些什么
//模板方法
void Make(){
boilwater();
Brew();
Pour();
AddSomething();
}
};
//具体实现
class Tea : public DrinkTemplate{
public:
virtual void boilwater(){
cout << "煮水" <<endl;
}
virtual void Brew(){
cout << "泡茶" <<endl;
}
virtual void Pour(){
cout << "倒茶" <<endl;
}
virtual void AddSomething(){
cout << "什么都不加" <<endl;
}
void Make(){
boilwater();
Brew();
Pour();
AddSomething();
}
};
class Coffee : public DrinkTemplate{
public:
virtual void boilwater(){
cout << "煮水" <<endl;
}
virtual void Brew(){
cout << "泡咖啡" <<endl;
}
virtual void Pour(){
cout << "倒咖啡" <<endl;
}
virtual void AddSomething(){
cout << "加糖、加奶" <<endl;
}
void Make(){
boilwater();
Brew();
Pour();
AddSomething();
}
};
int main(){
Tea* tea = new Tea;
tea->Make();
Coffee* coffee = new Coffee;
coffee->Make();
delete tea;
delete coffee;
return 0;
}