模板方法模式
定义一个操作中的算法的骨架。而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。其关键是将通用算法(逻辑)封装在抽象基类中,并将不同的算法细节放到子类中实现。
//抽象模板
class AbstractDrinkTmeplate {
public:
//水
virtual void water() = 0;
//茶叶
virtual void something() = 0;
//混合
virtual void mixture() = 0;
//模板方法
void make() {
this->water();
this->something();
this->mixture();
}
};
//茶水
class Tea :public AbstractDrinkTmeplate {
public:
virtual void water() {
cout << "加水" << endl;
}
virtual void something() {
cout << "加茶叶" << endl;
}
virtual void mixture() {
cout << "混合水与茶叶" << endl;
}
};
//咖啡
class Coffee :public AbstractDrinkTmeplate {
public:
virtual void water() {
cout << "加水" << endl;
}
virtual void something() {
cout << "加咖啡" << endl;
}
virtual void mixture() {
cout << "混合水与咖啡" << endl;
}
};
void test() {
Tea* tea = new Tea;
tea->make();
delete tea;
cout << "-----------------------" << endl;
Coffee* coffee = new Coffee;
coffee->make();
delete coffee;
}
优点:
父类定义算法,子类实现;子类实现的顺序不会影响算法的执行顺序
符合单一原则与开闭原则
子类决定某一个算法步骤是否会执行