版权声明:本文为博主原创文章,未经同意不允许转载! https://blog.csdn.net/wb175208/article/details/84500782
模板模式:定义一个操作的算法和骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构的情况下可以重新定义这个算法的一些步骤。
比如:
炒菜这件事情就有统一的步骤,先放油再放调料加火炒菜,这个固定不变的。而且顺序也是不变的。但是炒不同的菜加油的多少,火候的掌握是不相同的。比如我炒菜时喜欢放的油少,而我媳妇炒菜时喜欢多放油。
场景:
1.实现算法的不变部分,并将可变的行为留给子类实现;
2.将各个子类中公共的行为提取到父类中避免代码重复;
#include <stdio.h>
class Cook {
public:
void cooking() {
addOil();//先放油
addSeasoning();//再放调料
addFire();//加火
}
protected:
virtual void addOil() = 0;
virtual void addSeasoning() = 0;
virtual void addFire() = 0;
};
class MyCook :public Cook {
public:
void addOil() {
printf("添加少量的油!\n");
}
void addSeasoning() {
printf("添加少量的调料\n");
}
void addFire() {
printf("小火慢炖!\n");
}
};
class WifeCook :public Cook {
public:
void addOil() {
printf("添加大量的油!\n");
}
void addSeasoning() {
printf("添加大量的调料\n");
}
void addFire() {
printf("大货快炒!\n");
}
};
int main() {
MyCook* myCook = new MyCook;
WifeCook* wifeCook = new WifeCook;
myCook->cooking();
wifeCook->cooking();
return 0;
}
运行结果: