定义
定义一个算法骨架,而将一些步骤延迟到子类中进行实现。是的子类可以不改变算法的结构即可重定义该算法的某些特定的步骤。
场景举例&代码实现
场景举例
某动物园每周五都会安排动物演出,每次演出都按照固定的表演流程,但是其中几个表演子流程可以进行创新或者替换。
代码实现
定义算法的骨架
class ZooShow{
public:
void show(){ // 算法骨架
show1(); // 子流程1
show2(); // 子流程2
show3(); // 子流程3
}
protected:
virtual void show1() { cout << "start show1..." << endl;}
virtual void show2() { cout << "start show2..." << endl;}
virtual void show3() { cout << "start show3..." << endl;}
}
子流程中可以重写新的算法
class ZooShowExp1 : public ZooShow {
void show1() { cout << "start new show1..." << endl;}
}
class ZooShowExp2 : public ZooShow {
void show2() { cout << "start new show2..." << endl;}
}
class ZooShowExp3 : public ZooShow {
void show3() { cout << "start new show3..." << endl;}
}
int main(){
ZooShow *zs = new ZooShowExp1;
zs->show(); // 子类重写的地方使用子类的方法,没有重写的地方还是使用父类的方法
return 0;
}