一、应用场景
执行顺序已固定(step1 -> step2 ->step3 -> step4),但是步骤执行的逻辑不相同
二、实现逻辑
基类中,提供执行的步骤,具体的步骤实现交给子类完成
三、代码样例
class Base{
public:
virtual ~Base()= default;
void process() {
step1();
step2();
step3();
step4();
}
protected:
void step1() {cout << "step1" << endl;}
void step4() {cout << "step4" << endl;}
virtual void step2() = 0;
virtual void step3() = 0;
};
class Derived : public Base{
void step2() override {cout << "step2" << endl;}
void step3() override {cout << "step3" << endl;}
};
int main() {
Base* base = new Derived();
base->process();
return 0;
}
四、优点
1、封装不变部分,扩展可变部分
2、提取公共代码,便于维护
3、行为由父类控制,子类实现
五、缺点
每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大