模板模式概念:
整体结构是稳定的,而子步骤中有很多改变的需求。将子步骤(变化的部分)通过虚函数机制延迟到子类中实现,稳定的部分通过调用变化的部分(晚绑定)来实现。
不要调用我,让我来调用你
//模板模式实现
#include<iostream>
using namespace std;
class Template
{
public:
Template(){};//构造函数
virtual ~Template(){};//虚析构
//变化的子步骤
virtual void step1()=0;
virtual void step2()=0;
virtual void step3()=0;
//稳定的逻辑框架
void Run()
{
step1();
for(int i=0;i<5;i++)
{
step2();
}
step3();
}
};
class MyClass1:public Template
{
public:
MyClass1(){};
~MyClass1(){};
//重写变化的部分
void step1(){cout<<"MyCalss1 step1"<<endl;}
void step2(){cout<<"MyClass1 step2"<<endl;}
void step3(){cout<<"MyClass1 step3"<<endl;}
};
class MyClass2:public Template
{
public:
MyClass2(){};
~MyClass2(){};
//重写变化的部分
void step1(){cout<<"MyCalss2 step1"<<endl;}
void step2(){cout<<"MyClass2 step2"<<endl;}
void step3(){cout<<"MyClass2 step2"<<endl;}
};
int main()
{
MyClass1 class1;
MyClass2 class2;
class1.Run();
cout<<endl;
class2.Run();
return 0;
}